Intégration mobile des tournois et des quêtes
1) Architecture et points d'intégration
Navigation : lobby → onglet Tournois/Quêtes ; accès rapide depuis le header (icône avec badge de progression).
Diplinki : 'app ://event/{ id}', 'app ://mission/{ id}', 'app ://leader/{ id} ? tab. = my' est un routeur unique pour les widgets in-app, poils et web.
Intégration de contenu :- Native/React Native/Flutter pour leaders, cartes de mission et minuteurs.
- WebView - uniquement pour les informations/règles statiques ; on ne peut pas rendre un temps réel critique.
2) Carte de mission : anatomie mobile
Titre ≤ 2 lignes, icône de type, brève description (quoi/où/combien de temps).
Barre de progression + nombre (2/3), estimation du temps (≈ 20-25 min), complexité (•).
Récompenses : jetons/cosmétiques avec des mini-icônes, sans sous-texte « argent ».
CTA une : « Commencer/Continuer/Ramasser ». Secondaire : « Changer », « En savoir plus ».
Timer jusqu'à la date limite (couleurs douces, rouge dans les 10 derniers %).
État de on_hold : "Nous vérifions le résultat (jusqu'à 3 min). La récompense est maintenue".
3) Liderboards sur mobile (pas de flic)
Colonnes : # place, joueur (avatar/cadre/nick), lunettes, zone de prix, minuteur.
Sticky « Je » + bouton « à moi ». Jump to rank (champ de saisie de nombre).
Mises à jour 1 à 2 secondes, animation de 120 à 200 ms.
Pagination : scroll infini + « vers le début/vers soi-même ».
Seules les chaînes de diff (virtualisation, windowing) sont visibles.
4) Notifications Pushi et in-app (orchestration sans spam)
Règle : priorité des cartes in-app → push → email.
Fenêtres : croisement de l'utilisateur probable en ligne avec la planification de l'ivent (modèle « activité dans les 90 à 120 minutes à venir »).
Fréquence : ≤ N/semaine, ≤ M/jour ; heures silencieuses ; « silence intelligent » après mute.
Paloades : texte court + diplinc + aperçu de la récompense.
Exemples : `push. payload`:json
{
"title" : "Sprint du soir, 20 minutes", "body" : "Départ dans 15 min. ", "deeplink": "app://event/ev. s5. sprint20? highlight=reward"
}
Carte in-app : « ≈20 -25 min, 3 fournisseurs, drop rare 10 % ».
5) Hors ligne et réseau faible
Cache des missions/horaires de 24 à 48 heures ; « Dernière synchronisation : 14:02 ».
États hors ligne : « Afficher les règles » et « Planifier la participation », sans démarrer.
Le bouton Répéter pour les erreurs réseau ; ETag/If-None-Match pour économiser.
6) Performance et batterie
Virtualisation des listes (300 + lignes).
Lottie/sprites, limite de durée VFX (0. 6–1. 2 c), pas de shaders lourds.
Les minuteurs sont un cheduleur en teck unique, pas un « setInterval » par élément.
Mises à jour en arrière-plan : BG App Refresh/WorkManager avec une fréquence et une taille de réponse.
Télémétrie : WebSocket/SSE → compression ; backoff sur fond.
7) Sécurité, honnêteté et anti-abyse
Le serveur décide RNG, le client n'est qu'un visuel.
Idempotence des récompenses : un événement → une mise en recouvrement (server-side).
Les challenges Humanity au lieu de kapchi (micro-gestes), sont allumés à risque.
Limitation du « changement de mission » (cooldown), variabilité des exigences (anti-phare).
Onbording « Comment ça marche » : chances de drop, pity, kaps, règles des ligues.
8) Gardes RG sur mobile
« Mode silencieux », « étouffer les effets des autres », rappels de pauses.
Avec les signaux de fatigue - réduire la complexité, offrir une pause, interdire les formats longs.
Opt-out rapide de la personnalisation des notifications et des mini-jeux.
9) Droits et confidentialité
iOS ATT/Notifications : expliquer la valeur, demander la permission après le micro-montage.
Android 13 + runtime-permissions pour les pushis ; les canaux de notification (low/normal/high).
Collecte de données - agrégats ; PII minimum ; écrans avec stratégie et « Supprimer les données ».
10) Analyses et métriques
Cartes de mission : CTR, Taux de démarrage, Taux de complétion, TTC Médian, Taux Equip/Durée pour les cosmétiques.
Tournois : Join Rate, part « à soi-même », temps de visibilité des tables, temps P95 avant la récompense.
Notifications : Hit Rate fenêtres (inclus dans la session active), Join Uplift, Mute/Unsub Rate.
Économie : Emission to GGR, Prix ROI, Gini par SP.
Stabilité : miettes sur les erreurs de réseau, durée des rendeurs, ANR/Crash-free.
11) Plan A/B
1. Barre de progrès : numérique + visuel vs seulement visuel.
2. Estimation du temps sur la carte : activé/désactivé.
3. Taux de mises à jour du leader : 1 s vs 2 s.
4. Push-time : T-30 vs T-15 min.
5. Format de la carte : un CTA vs deux égaux.
6. « Vers vous-même » : bouton vs chaîne fixe.
12) Nuances de plateforme
iOS : BG App Refresh est limité ; Utilisez pushi avec 'content-available' pour des mises à jour silencieuses (avec soin).
Android : WorkManager/Foreground Service uniquement en cas d'activité explicite ; les canaux de notification sont obligatoires.
React Native/Flutter:- RN : FlatList avec 'getItemLayout '/' windowSize', Reanimated 3 pour les animations diff.
- Flutter: `ListView. builder '+' AnimatedList '/' ImplicitlyAnimatedReorderableList', isolats pour la logique lourde.
13) Modèle de contenu (JSON) et diplinks
Mission
json
{
"id": "m. s5. play. providers. 3", "title" : "Ouvrez les trois fournisseurs", "Summary" : "Jouez avec 3 fournisseurs différents en 30 minutes", "difficile" : "medium", "est_time_min" : 25, "progress" : {"current" : 1, "target" : 3}, "rewards" : {"tokens" : 12 : ", cosmetic_drop" : {"rarity" : "Rare", "p" : 0. 1}}, "expires_at": "2025-10-28T18:00:00Z", "state": "available", "deeplink": "app://mission/m. s5. play. providers. 3? start=true"
}
Tournoi
json
{
"event_id": "ev. s5. sprint20", "title": "Вечерний спринт 20 мин", "stage": "qualifier", "ends_at": "2025-10-24T21:00:00Z", "leaderboard": {"league": "Gold I", "my_rank": 128, "delta_to_next": 42}, "rewards_preview": [{"type": "cosmetic", "rarity": "Epic"}], "deeplink": "app://event/ev. s5. sprint20? tab=leaderboard"
}
Schéma URI
app://event/{id}
app://mission/{id}
app://leaderboard/{id}?tab=my app://quests/today
14) États, erreurs, squelettes
Loading : squelettes 3-5 lignes/mystères, shimmer ≤ 1. 2 c.
Empty : texte utile + « Obtenir une mission de lancement ».
Error : message simple + « Refaire » ; hors ligne - cache et heure de la dernière synchronisation.
15) Chéquiste de sortie (MVP → v1. 0)
MVP (2-4 semaines) :- Diplinki, cartes de mission de base, leader avec butch-update 2 s.
- Cartes de notification in-app, un canal push, un cache de planification, un écran « Comment ça marche ».
- RG-tumblers, anti-phare (cooldown « Changer de mission »).
- Personal « to you », Jump to rank, mini-jeu de chauffage (≤ 90 s) dans le qualificatif.
- Pushi silencieux pour la mise à jour en arrière-plan, reason-codes à l' on_hold.
- Télémétrie : Hit Rate des fenêtres, Join Uplift, Gini SP.
- Piste de saison complète, cosmétiques rétro, localisation, disponibilité (contraste, tags VoiceOver/TalkBack).
- Logs d'audit, appels, antiboth-biométrie.
- Un moteur A/B, des rapports d'honnêteté.
L'intégration mobile des tournois et des quêtes fonctionne lorsque la navigation est instantanée (diplines), que l'UI est « d'un seul coup d'oeil », que les mises à jour sont fluides et économiques à la batterie, et que l'honnêteté et les gardes RG sont intégrés dans chaque solution, des cartes de mission à l'orchestration push. Donnez au joueur des objectifs compréhensibles, des minuteries prévisibles et un VFX silencieux, gardez l'économie promo sous les caps et mesurez les fenêtres Hit Rate, Completion/Join Uplift et Gini par SP - alors le ligament mobile deviendra un moteur d'engagement stable sans trop de bruit.