# Activation des notifications push (EAS + FCM/APNs)

Le code push est déjà en place (mobile + backend). Il manque uniquement les
**credentials de livraison** : sans eux, `getExpoPushTokenAsync()` ne peut pas
générer de token et aucune notif n'atteint un device réel. Ces étapes
nécessitent **tes comptes** (Expo, Firebase, Apple) — elles ne peuvent pas être
faites depuis le terminal de l'agent.

Architecture retenue : **Expo Push Service**. L'app génère un
`ExponentPushToken[...]`, le backend POST vers `https://exp.host/--/api/v2/push/send`,
et Expo relaie vers FCM (Android) / APNs (iOS). Le backend n'a donc PAS besoin
des clés FCM/APNs — c'est le projet **Expo** qui les détient.

Déjà scaffoldé dans le repo :
- `eas.json` (profils `development` / `preview` / `production`).
- `app.json` : `extra.eas.projectId` (vide, rempli par `eas init`), `package`
  Android `fr.missioflow.mobile`, `ios.bundleIdentifier`, plugin
  `expo-notifications`, permission `POST_NOTIFICATIONS`, `RECORD_AUDIO` bloqué.

---

## 1. Lier le projet à Expo (remplit `projectId`)

```bash
eas login                 # ton compte Expo
eas init                  # crée/lie le projet → écrit extra.eas.projectId dans app.json
```

Après ça, `resolveProjectId()` dans [src/services/pushNotifications.ts](src/services/pushNotifications.ts)
trouvera le `projectId` et le token Expo pourra être généré.

## 2. Android — credentials FCM (V1)

1. Console Firebase → créer (ou réutiliser) un projet.
2. Ajouter une app Android avec le package **`fr.missioflow.mobile`**.
3. Télécharger le **`google-services.json`** → le placer à
   `android/app/google-services.json` (chemin attendu par le build prebuild/gradle).
4. Créer une **clé de compte de service FCM V1** (Firebase → Paramètres du projet →
   Comptes de service → générer une clé privée JSON).
5. La fournir à Expo pour qu'il puisse livrer :

```bash
eas credentials                # plateforme Android → "FCM V1 service account key" → upload du JSON
```

> C'est cette clé côté Expo qui permet à `exp.host` de pousser vers les devices
> Android. Le backend ne la voit jamais.

## 3. iOS — APNs (optionnel, si build iOS)

Nécessite un **compte Apple Developer** (99 $/an).

```bash
eas credentials                # plateforme iOS → laisser EAS générer la clé APNs (.p8)
```

Le `bundleIdentifier` `fr.missioflow.mobile` est déjà dans `app.json`.

## 4. Builder un APK testable

```bash
eas build --platform android --profile preview
```

→ APK installable (distribution interne) avec les credentials FCM embarqués.
Installer sur un vrai device (les push ne marchent **pas** sur émulateur).

## 5. Validation end-to-end

1. Installer l'APK sur un téléphone, configurer l'instance (URL/QR), se connecter.
   → au login, l'app appelle `POST /api/mobile/register_device.php` avec le token.
2. Vérifier en base : `SELECT expo_push_token FROM mobile_devices WHERE user_id = <tech>` non NULL.
3. Depuis le panel admin, modifier une intervention assignée à ce technicien
   (réassigner, changer la date, annuler…).
4. Le device doit recevoir la notif (« Date modifiée », etc.) et l'app, si ouverte,
   recharge la liste des missions.

Tester sur **n'importe quel plan** (le gate Enterprise a été retiré côté backend).

---

## Notes

- **Sans EAS** : possible aussi en gardant le build gradle existant (`expo prebuild`
  + `android/app/google-services.json`), mais `getExpoPushTokenAsync` requiert
  malgré tout un `projectId` Expo (étape 1) et la clé FCM côté Expo (étape 2.5).
  EAS Build reste le chemin le plus court pour un APK signé avec credentials.
- **Dégradation propre** : tant que le `projectId` n'est pas configuré,
  l'enregistrement push échoue silencieusement (best-effort, aucun crash, login
  inchangé). L'app reste pleinement fonctionnelle sans push.
