Skip to content

Tout pour WordPress, le développement web — et plus encore

📱 Envoi de notifications push via Google FCM et PHP : guide 2026

📱 Envoi de notifications push via Google FCM et PHP : guide 2026

Vous installez une application et, le lendemain, vous l’oubliez. La rétention des utilisateurs est l’un des défis les plus critiques du développement mobile: sans déclencheur externe, les gens ne pensent tout simplement pas à rouvrir l’application.

Les notifications push résolvent ce problème directement. Un bref signal sur l’écran de verrouillage, et l’utilisateur revient vers votre contenu ou votre action. Depuis juin 2024, Google a complètement arrêté l’ancienne version de l’API FCM ainsi que l’authentification par clé de serveur. Seule l’API HTTP v1 avec OAuth 2.0 fonctionne désormais.

Voici un guide pas à pas pour configurer Firebase Cloud Messaging et envoyer des notifications push multiplateformes via PHP: de la création du projet à la réception des notifications sur Android et iOS.

Qu’est-ce que FCM et pourquoi l’ancienne API a été arrêtée

💡 Aperçu rapide:

  • Créer un projet Firebase et obtenir une clé JSON
  • Configurer le SDK client et obtenir un token FCM
  • Installer kreait/firebase-php via Composer
  • Envoyer une notification push à un topic en un seul appel
  • Recevoir la notification sur l’appareil en 1 à 3 secondes

Firebase Cloud Messaging (FCM) est le service multiplateforme de Google pour l’envoi de notifications vers Android, iOS et le web. Il est gratuit, sans quotas stricts sur le nombre de messages, et fonctionne via une API serveur unique.

Le prédécesseur de FCM, Google Cloud Messaging (GCM), utilisait un schéma avec des identifiants d’enregistrement d’appareil et une clé de serveur. Les développeurs stockaient les tokens dans leur propre base de données et envoyaient les notifications en boucle. FCM a ajouté les topics (canaux thématiques): un appareil s’abonne à /topics/news, et le serveur envoie un message à tout le groupe en une seule fois, sans itérer sur les tokens.

En juin 2023, Google a annoncé l’obsolescence de l’API HTTP legacy et, depuis mi-2024, celle-ci est complètement arrêtée. L’ancien endpoint https://android.googleapis.com/gcm/send n’accepte plus de requêtes. Au lieu d’une clé de serveur, vous avez maintenant besoin d’un token OAuth 2.0 obtenu à partir du fichier JSON d’un compte de service Firebase. Les détails de la migration sont disponibles dans la documentation officielle FCM.

Notez que l’API Instance ID (iid.googleapis.com) pour la gestion des abonnements aux topics est également obsolète. L’approche moderne consiste à s’abonner côté client via le SDK Firebase ou à gérer les abonnements via le SDK Firebase Admin côté serveur.

Étape 1: Créer un projet dans la console Firebase

Rendez-vous sur la console Firebase avec votre compte Google. Cliquez sur «Créer un projet», donnez-lui un nom et attendez l’initialisation.

Paramètres du projet Firebase avec clé de serveur

Une fois le projet créé, allez dans Paramètres du projet → Comptes de service. Cliquez sur «Générer une nouvelle clé privée»: un fichier JSON contenant les identifiants se télécharge. Enregistrez-le dans un dossier protégé de votre serveur (en dehors de la racine du document): c’est ainsi que le client PHP obtiendra le token OAuth 2.0 pour l’API HTTP v1.

Toujours dans Paramètres du projet → Cloud Messaging, ajoutez les certificats APNs iOS si vous prévoyez d’envoyer des notifications vers des appareils Apple. Sans cette étape, les notifications push ne fonctionneront pas sur iOS.

Étape 2: Configurer le SDK client

Pour que le serveur sache où envoyer les notifications, l’application cliente doit obtenir un token FCM et l’envoyer à votre serveur. La configuration pour les deux plateformes est couverte par la documentation Firebase; voici les points clés.

IOS

Définissez l’URL d’enregistrement de l’appareil, c’est-à-dire l’endpoint de votre script PHP qui accepte le token:

URL d'enregistrement de l'appareil dans le SDK iOS

Intégration minimale du SDK Firebase dans une application iOS:

Exemple de configuration du SDK Firebase pour iOS

À chaque lancement, l’application appelle Messaging.messaging().token(), obtient le token FCM actuel et l’envoie à votre URL d’enregistrement. Le token peut changer lorsque l’application est réinstallée: ne le sauvegardez donc pas de façon permanente, mettez-le à jour à chaque lancement.

Android

La logique est la même: définissez l’URL de l’endpoint serveur pour l’enregistrement du token:

URL d'enregistrement de l'appareil dans le SDK Android

Intégration du SDK Firebase sur Android:

Exemple de configuration du SDK Firebase pour Android

Sur Android, le token se met également à jour lorsque l’application est réinstallée ou que les données sont effacées; gardez cela à l’esprit lors de la conception de la table des appareils de votre serveur.

Étape 3: Installer la bibliothèque PHP et s’authentifier

Pour travailler avec l’API HTTP v1 via PHP, vous avez besoin d’une bibliothèque qui gère l’obtention du token OAuth 2.0 à partir du fichier JSON du compte de service. L’option la plus mature à mi-2026 est kreait/firebase-php. Installation via Composer:

1composer require kreait/firebase-php

Le fichier send_push.php avec l’initialisation du client:

1<?php
2require_once __DIR__ . '/vendor/autoload.php';
3
4use Kreait\Firebase\Factory;
5use Kreait\Firebase\Messaging\CloudMessage;
6use Kreait\Firebase\Messaging\Notification;
7
8$factory = (new Factory)
9 ->withServiceAccount('/путь/к/serviceAccountKey.json');
10
11$messaging = $factory->createMessaging();

Vérifiez que le chemin vers la clé JSON est absolu et que le fichier est lisible par le processus PHP. Ne placez jamais la clé JSON dans un dossier public du site web; si quelqu’un y accède directement via un navigateur, il obtiendrait un accès complet à votre projet Firebase.

Étape 4: Envoyer une notification via l’API HTTP v1

Passons maintenant au mécanisme d’envoi proprement dit. Le code ci-dessous récupère le titre et le texte de la notification depuis un formulaire, construit la charge utile et l’envoie au topic spécifié:

1<?php
2require_once __DIR__ . '/vendor/autoload.php';
3
4use Kreait\Firebase\Factory;
5use Kreait\Firebase\Messaging\CloudMessage;
6use Kreait\Firebase\Messaging\Notification;
7
8$factory = (new Factory)
9 ->withServiceAccount('/путь/к/serviceAccountKey.json');
10
11$messaging = $factory->createMessaging();
12
13$topic = 'my-app';
14
15$notification = Notification::create(
16 $_POST['title'] ?? 'Новое уведомление',
17 $_POST['summary'] ?? ''
18);
19
20$message = CloudMessage::withTarget('topic', $topic)
21 ->withNotification($notification)
22 ->withData([
23 'action' => 'models',
24 'model_id' => '2701',
25 ])
26 ->withHighestPossiblePriority();
27
28try {
29 $result = $messaging->send($message);
30 echo "Уведомление отправлено. ID: " . json_encode($result);
31} catch (\Kreait\Firebase\Exception\MessagingException $e) {
32 echo "Ошибка отправки: " . $e->getMessage();
33}

Points clés expliqués:

  • CloudMessage::withTarget('topic', $topic) envoie à un topic; pour envoyer à un appareil spécifique, remplacez par withTarget('token', 'DEVICE_TOKEN').
  • ->withData([...]) contient des données personnalisées pour le deep linking: lorsque l’utilisateur appuie sur la notification, l’application ouvre un écran spécifique (dans cet exemple, une page modèle).
  • ->withHighestPossiblePriority() définit une priorité haute et la notification est délivrée immédiatement; pour des événements silencieux en arrière-plan, utilisez normal.
  • MessagingException capture les erreurs de validation, d’authentification et réseau; enveloppez toujours l’appel d’envoi dans un bloc try/catch.

Ce code remplace entièrement la combinaison obsolète curl + Authorization:key=SERVER_KEY + l’endpoint gcm/send, qui a cessé de fonctionner en 2024.

Formulaire pour l’envoi manuel

Pour un test rapide, voici une interface HTML simple:

1<form method="POST" action="send_push.php">
2 <input type="text" name="title" placeholder="Заголовок уведомления" required>
3 <textarea name="summary" placeholder="Текст уведомления" required></textarea>
4 <button type="submit">Отправить push</button>
5</form>

En pratique, un tel formulaire n’est qu’un outil de débogage. Dans un projet en production, l’appel $messaging->send() est intégré à la logique métier: publier un article → notifier les abonnés du topic /topics/news.

Formulaire d'envoi de notification push dans le panneau d'administration

Étape 5: Vérifier la réception de la notification

Après l’envoi, la notification apparaît sur l’écran de verrouillage en 1 à 3 secondes. Le titre et le corps sont ceux passés à Notification::create(). Appuyer sur la notification lance l’application et, via la charge utile de données, vous passez les paramètres pour naviguer vers l’écran approprié.

Notification push sur l'écran du téléphone

Les topics offrent une segmentation d’audience flexible. Vous voulez séparer les utilisateurs par plateforme? Créez /topics/ios-news et /topics/android-news. Par géographie? /topics/users-europe. Par langue? /topics/lang-ru. Combinez comme vous le souhaitez: les topics sont gratuits et sans limite de quantité.

Résultat de l'envoi de notification push via FCM

Vidéo: tutoriel de configuration complet

Ce tutoriel de 20 minutes montre l’intégration complète de Firebase Cloud Messaging avec un backend PHP: de la création d’un projet dans la console à l’envoi et à la réception d’une notification push sur un appareil réel.

⁉️🤔 Foire aux questions

Dois-je payer pour Firebase Cloud Messaging?

FCM est entièrement gratuit. Google ne facture pas l’envoi de notifications push et n’impose pas de quotas stricts sur le nombre de messages. À très gros volumes (millions par heure), un throttling peut se déclencher, mais pour une application typique avec une audience allant jusqu’à plusieurs centaines de milliers d’utilisateurs, il n’y a aucune limitation.

L’utilisation de la bibliothèque kreait/firebase-php est-elle obligatoire?

Non, mais c’est le package PHP le mieux maintenu pour Firebase à mi-2026. L’alternative consiste à travailler directement avec l’API HTTP v1 via Guzzle et google/auth pour obtenir le token OAuth 2.0. Cependant, dans ce cas, vous devrez gérer manuellement la durée de vie du token, le rafraîchir et suivre les erreurs d’authentification. kreait/firebase-php gère cela automatiquement.

Comment envoyer des notifications à un appareil spécifique plutôt qu’à un topic entier?

Remplacez withTarget('topic', $topic) par withTarget('token', $deviceToken), où $deviceToken est le token FCM reçu de l’application cliente. Le token est unique pour chaque installation de l’application sur un appareil donné.

Que faire si les notifications n’arrivent pas sur iOS?

Vérifiez trois choses: (1) le certificat APNs est bien téléchargé dans les paramètres du projet Firebase (Cloud Messaging → Configuration de l’application Apple), (2) la clé FirebaseAppDelegateProxyEnabled avec la valeur YES est ajoutée au fichier Info.plist, (3) l’appareil n’est pas en mode Ne pas déranger. Notez également que le simulateur iOS ne reçoit pas de notifications push; testez uniquement sur un appareil physique.

Puis-je envoyer une notification silencieuse sans l’afficher à l’utilisateur?

Oui, utilisez un message contenant uniquement des données: passez seulement ->withData([...]) sans ->withNotification(...). Un tel message réveille l’application en arrière-plan pour la synchronisation des données, mais n’affiche pas de notification visuelle. Sur iOS, ajoutez l’en-tête content-available avec la valeur 1 pour le traitement en arrière-plan.

Ce qui a changé et comment éviter de casser les notifications en 2026

Google a progressivement renforcé les exigences de sécurité de FCM. Le principal changement est l’arrêt de l’API HTTP legacy avec authentification par clé de serveur. Si votre code PHP appelle encore https://android.googleapis.com/gcm/send ou https://fcm.googleapis.com/fcm/send avec un en-tête Authorization: key=..., les notifications ne sont plus parties depuis mi-2024.

Le passage à l’API HTTP v1 avec OAuth 2.0 via un compte de service résout complètement ce problème. La bibliothèque kreait/firebase-php gère l’obtention et le rafraîchissement du token, vous n’avez donc pas besoin d’écrire la logique de rafraîchissement manuellement. Stockez la clé JSON du compte de service en dehors de la racine du document et excluez-la de votre dépôt via .gitignore.

Avec les topics et les charges utiles de données, vous obtenez un routage flexible: les actualités vont aux abonnés de /topics/news, les messages personnels sont envoyés par token et la synchronisation silencieuse passe par des messages contenant uniquement des données. Toute cette fonctionnalité est gratuite et fonctionne sur Android, iOS et le web à partir d’un seul script PHP.

Vérifiez dès maintenant le code d’envoi de notifications actuel dans votre projet. S’il utilise encore Authorization: key=, passez à l’API HTTP v1. Postez vos questions et les nuances d’intégration dans les commentaires.