FCM (push Android et web)
Firebase Cloud Messaging porte les push Android et le web push. Comme pour APNs, Appwin envoie avec tes identifiants.
Appwin utilise l'API FCM v1, celle qui s'authentifie par compte de service.
Les anciennes clés serveur de l'API legacy (AAAA…) ne fonctionnent pas -
Google les a retirées.
1. Générer la clé de compte de service
Dans la console Firebase, sur ton projet :
- Roue crantée → Paramètres du projet
- Onglet Comptes de service
- Générer une nouvelle clé privée → confirme
- Le fichier JSON se télécharge
Vérifie au passage que Cloud Messaging (API V1) est activé pour le projet.
Le JSON ne se retélécharge pas. Perdu, on en génère un nouveau et on supprime l'ancien depuis Google Cloud.
2. Relever le Project ID
Paramètres du projet → onglet Général → « ID du projet », de la forme
mon-app-1a2b3.
C'est l'identifiant technique, pas le nom d'affichage. Les deux se ressemblent souvent, et se confondre donne un 404 sur tous les envois.
3. Renseigner dans Appwin
Réglages → Projets → ton app → Intégrations → Firebase Cloud Messaging.
| Champ | Valeur |
|---|---|
| Firebase Project ID | mon-app-1a2b3 |
| Service Account JSON | Le contenu entier du fichier |
Passe par Importer un fichier plutôt que par un copier-coller : le JSON
contient une clé privée avec des \n échappés, qu'un presse-papiers abîme
facilement.
4. Enregistrer le jeton de l'appareil
Chaque appareil déclare son jeton FCM après avoir obtenu l'autorisation.
final token = await FirebaseMessaging.instance.getToken();
if (token != null) {
await AppwinCore.instance.registerPushToken(
token: token,
platform: 'android',
pushOptIn: true,
);
}
FCM peut faire tourner un jeton à tout moment. Rebranche l'enregistrement sur
onTokenRefresh, sinon l'appareil devient injoignable sans prévenir :
FirebaseMessaging.instance.onTokenRefresh.listen((token) {
AppwinCore.instance.registerPushToken(
token: token,
platform: 'android',
);
});
pushOptIn reflète le consentement de l'utilisateur. À repasser à false s'il
retire son autorisation, plutôt que de cesser d'enregistrer le jeton : ça permet
de distinguer « a refusé » de « n'a jamais été vu ».
Vérifier
Comme pour APNs, une clé absente fait simuler l'envoi côté API plutôt qu'échouer. Une campagne peut donc sembler partie sans que rien ne soit envoyé.
Contrôle les logs de l'API : un message not configured - simulating delivery
indique que la clé manque.
Dépannage
| Symptôme | Cause probable |
|---|---|
| Android muet | Ancienne clé serveur legacy au lieu d'un compte de service |
| 404 sur tous les envois | Nom d'affichage renseigné au lieu de l'ID du projet |
UNREGISTERED | Jeton périmé : l'app a été désinstallée, ou le refresh n'est pas branché |
SENDER_ID_MISMATCH | Le jeton vient d'un autre projet Firebase que celui configuré |
| JSON refusé | Fichier tronqué au copier-coller : utilise l'import |
| Rien ne part du tout | Clé absente : l'API simule et le dit dans ses logs |
Suite
- APNs - le versant iOS
- Notifications - campagnes, audiences, automatisations