Terrain 9 — APIs natives
9 drills · ~10 min · Chapitres liés : Partie 9
1. Le rituel des modules expo-* en 4 étapes ?
✅
Installer (npx expo install) → permissions (manifeste via plugin + demande runtime) →
config plugin si natif → utiliser. Étape 0 : vérifier la compat Expo Go dans la doc.
2. Les trois états d’une permission runtime, et la conduite pour chacun ?
✅
granted (→ agir), denied mais canAskAgain (→ redemander plus tard, au bon moment), blocked (canAskAgain: false → seul recours : Linking.openSettings(), sans harceler).
3. Quand demande-t-on une permission ? (la règle UX)
✅
Au moment du besoin, déclenchée par l’action utilisateur qui l’explique (activer le rappel → boîte notifications) — jamais en rafale au premier lancement.
4. Notification locale vs push : la différence, et laquelle exige un serveur ?
✅
Locale = planifiée par l’app SUR l’appareil (zéro serveur — le défi quotidien). Push = envoyée d’un serveur via FCM (dev build requis, infra) — Drill n’en a pas besoin.
5. Le tap sur une notification doit ouvrir un quiz : les DEUX mécanismes à câbler ?
✅
addNotificationResponseReceivedListener (app ouverte/arrière-plan) ET
getLastNotificationResponseAsync au démarrage (app tuée — le listener n’existait pas au
tap). L’URL voyage dans content.data.
6. Pourquoi cancel avant schedule dans la planification du défi quotidien ?
✅
Idempotence (identifier fixe + cancel préalable) : appeler N fois ne laisse qu’UNE planification — l’anti « notifications en double ».
7. La grammaire haptique de Drill : quel feedback pour un tap ? un verdict correct ? le timer sous 3 s ?
✅
impact Light (contact) · notification Success (verdict) · notification Warning (alerte, une fois). Et le silence partout ailleurs — le fond qui fait ressortir le signal.
8. Pourquoi précharger les sons de jeu (createAudioPlayer global) ?
✅
Charger au moment de jouer = 100-300 ms de latence : le feedback arrive « à côté » de l’action. Préchargés + seekTo(0) pour rejouer.
9. Partager un score : quelle API, quelle permission, et le piège du retour ?
✅
Share.share({ message }) — aucune permission (l’utilisateur choisit la destination).
Piège : sharedAction ne garantit pas un envoi réel sur Android — pas de récompense
dessus.
👉 Terrain suivant : 10 — Animations & gestes