Comment envoyer des notifications push mobiles avec PHP et Firebase

0
281
McLittle Stock/Shutterstock.com

Google& Le service Firebase Cloud Messaging (FCM) de #8217 est un moyen gratuit et pratique de distribuer des notifications push aux appareils mobiles. Il fonctionne avec les cibles iOS, Android et Web, en éliminant les différences entre les plates-formes. Vous envoyez votre charge utile une seule fois à l'API de Firebase et bénéficiez d'une livraison en temps réel à tous vos utilisateurs.

Dans cet article, nous allons montrer comment utiliser Firebase pour envoyer des notifications push à partir de votre code PHP côté serveur. Nous utilisons la bibliothèque tierce php-firebase-cloud-messaging (PHP-FCM) pour simplifier davantage l'intégration de Firebase.

Décrire l'architecture< /h2>

L'envoi réussi d'une notification push nécessite que plusieurs composants fonctionnent ensemble. Vous devez d'abord disposer d'un compte Firebase actif avec un projet sur lequel FCM est activé. Nous allons le configurer dans les étapes suivantes. Vous recevrez une clé de serveur que votre backend PHP doit inclure avec ses requêtes Firebase.

Vous aurez également besoin d'une application qui utilise le SDK Firebase pour produire un jeton d'enregistrement client. Ce jeton doit être envoyé à votre backend PHP. Conservez-le dans votre base de données avec les informations identifiant le client, telles que son ID utilisateur connecté dans votre application.

Comme cet article se concentre sur l'intégration backend, nous supposerons que vous disposez déjà d'une application client Firebase qui s'abonne aux notifications et récupère un jeton d'enregistrement. Vous pouvez suivre la documentation pour créer une application Android de base si vous avez besoin d'un exemple de projet. Dans votre code côté client, envoyez le jeton Firebase à un point de terminaison d'API que vous créerez dans votre service PHP.

Une fois que vous avez des jetons client disponibles sur votre serveur, vous pouvez envoyer des notifications push en faisant des requêtes HTTP à l'API FCM. Firebase assurera la médiation avec les plates-formes de diffusion de notifications individuelles, en transmettant votre alerte aux appareils spécifiés. FCM mappe en interne chaque jeton client sur la plate-forme appropriée, telle que Google Play Services pour Android et Apple Push Notification Service (APNS) pour iOS.

Création de votre Firebase Projet

Rendez-vous sur la console Firebase, connectez-vous et cliquez sur “Ajouter un projet” pour commencer à configurer votre intégration. Donnez un nom à votre projet et cliquez sur les invites de configuration initiales. Cliquez sur le rouage des paramètres en haut à gauche lorsque vous atteignez le tableau de bord. Choisissez “Paramètres du projet” dans le menu qui s'affiche.

Accédez à “Cloud Messaging” onglet et notez votre clé de serveur. Votre service PHP utilisera ces informations d'identification pour envoyer des notifications à l'API Firebase.

Vous devez enregistrer vos applications mobiles dans la console Firebase. De retour sur la page d'accueil, utilisez le bouton “Ajouter une application” boutons pour ajouter vos composants iOS et Android. Suivez l'assistant de configuration pour fournir les données de votre application et télécharger son fichier de configuration Firebase. Cela doit être référencé lorsque vous initialisez Firebase dans votre code côté client.

Si vous créez une application iOS, vous devez lier manuellement votre clé APNS à Firebase. Cliquez sur le rouage des paramètres en haut à gauche, choisissez “Paramètres du projet,” et revenez à “Cloud Messaging.” Une “applications Apple” apparaîtra lorsque vous aurez un composant iOS dans votre projet. Ajoutez une clé ou un certificat APNS à partir de votre compte de développeur Apple pour terminer l'intégration. Cela permet à FCM d'envoyer des notifications à APNS en votre nom.

Préparation de votre application PHP

Commencez votre projet PHP en ajoutant la bibliothèque PHP-FCM à l'aide de Composer :

composer require sngrl/php-firebase-cloud-messaging

Dans votre code, créez une instance de la classe Client de PHP-FCM :

use sngrlPhpFirebaseCloudMessagingClientClient ;   $client = nouveau Client(); $client -> setApiKey "FCM-SERVER-KEY"); $client -> injectGuzzleHttpClient(nouveau GuzzleHttpClient());

Transmettez à la méthode setApiKey() la clé de serveur que vous avez copiée depuis votre console API Firebase. Dans une application réelle, cela doit être stocké en toute sécurité et traité comme un secret confidentiel.

PHP-FCM s'appuie sur une instance Guzzle injectée pour effectuer ses requêtes HTTP. Guzzle est automatiquement inclus en tant que dépendance, vous n'avez donc pas besoin de l'installer manuellement. Nous construisons un nouveau client Guzzle dans l'exemple ci-dessus ; vous pouvez réutiliser une instance existante si vous avez déjà Guzzle dans votre application.

L'instance du client FCM est maintenant prête à envoyer des notifications à votre compte FCM.

Enregistrement des jetons client

Les notifications sont distribuées aux jetons client qui représentent votre utilisateurs’ dispositifs. Comme expliqué ci-dessus, vous devrez exposer un point de terminaison d'API dans votre application qui permet à vos applications clientes d'envoyer leur jeton FCM après la connexion de l'utilisateur.

Voici un exemple de base de ce que cela pourrait ressembler à :

$token = $_POST["fcmToken"]; $userId = ((int) $_POST["identifiantutilisateur"]);   /** * Appeler une fonction qui conserve une association utilisateur/token * à votre base de données */saveUserFcmToken($userId, $token);

Pour envoyer une notification push à chaque appareil enregistré, sélectionnez tous les jetons dans votre magasin de données. Vous pouvez envoyer à un utilisateur spécifique en récupérant les tokens associés à son ID. Cela affichera la notification sur tous les appareils auxquels ils se sont connectés, ce qui est généralement le comportement prévu.

Envoi de notifications

PHP-FCM résume chaque livraison de notification dans un objet Message. Cela encapsule une notification – contenant le texte affiché à l'utilisateur – et toutes les options de livraison que vous fournissez.

Préparez d'abord votre notification :

utilisez sngrlPhpFirebaseCloudMessagingClientNotification ;   $notification = nouvelle notification( "Titre de la notification", "Le texte le plus long de la notification, affiché sous le titre" );

Créez ensuite un message pour représenter la livraison de la notification :

utilisez sngrlPhpFirebaseCloudMessagingClientMessage ;   $message = nouveau message(); $message -> setNotification($notification);

Avant d'envoyer votre message, ajoutez un ou plusieurs destinataires. La méthode addRecipient() prend une instance Device ; cette classe a besoin de l'un de vos jetons client FCM comme paramètre de constructeur :

utilisez sngrlPhpFirebaseCloudMessagingClientRecipientDevice ;   $message -> addReceipient "nouveau périphérique"FCM-CLIENT-TOKEN-USER-1"""" $message -> addReceipient "nouveau périphérique"FCM-CLIENT-TOKEN-USER-2" """;

Vous êtes maintenant prêt à envoyer le message à l'aide du client créé précédemment :

$client -> envoyer un "$message";

La notification sera envoyée aux appareils que vous avez ajoutés en tant que destinataires.

Voici un exemple complet qui encapsule le code de gestion des notifications dans une fonction pratique :

utilisez sngrlPhpFirebaseCloudMessagingClientClient ; utilisez sngrlPhpFirebaseCloudMessagingClientMessage ; utilisez sngrlPhpFirebaseCloudMessagingClientNotification ; utilisez sngrlPhpFirebaseCloudMessagingClientRecipientDevice ;   $client = nouveau Client(); $client -> setApiKey "FCM-SERVER-KEY"); $client -> injectGuzzleHttpClient(nouveau GuzzleHttpClient());   fonction sendNotification( Client $client, string $title, string $body, string …$clientTokens) : vide {   $message = nouveau message();   $message -> setNotification( nouvelle notification( $title, $body ) );   foreach ($clientTokens as $clientToken) { $message -> addRecipient(nouvel appareil($clientToken)); }   $client -> envoyer un "$message";   }   sendNotification($client, "Hello World", "Test Notification", "FCM-CLIENT-TOKEN-1");

Gestion des données de réponse FCM

La méthode Client ::send() renvoie l'objet de réponse HTTP pour la demande de notification. Vous pouvez inspecter les données de réponse codées JSON pour déterminer si vos notifications ont été envoyées avec succès.

$message = nouveau message(); $message -> setNotification "nouvelle notification("Test", "Test")); $message -> addReceipient "nouveau périphérique"FCM-CLIENT-TOKEN-USER-1"""" $message -> addReceipient "nouveau périphérique"FCM-CLIENT-TOKEN-USER-2" """;   $réponse = $client -> envoyer un "$message"; $responseData = $response -> json();

Le tableau de données de réponse a une structure similaire à la suivante :

{ "success" : 1, "failure" : 1, "results" : [ { "message_id" : 100 }, { "error" : "InvalidRegistration" } ] }

Le tableau de résultats contient un objet représentant l'état de livraison de chacun des appareils auxquels vous avez essayé d'envoyer. Cela correspondra à l'ordre des destinataires ajoutés au message via la méthode addRecipient(). L'exemple JSON ci-dessus indique que seul le premier appareil a reçu la notification. La deuxième livraison a échoué, vous devez donc supprimer le jeton d'appareil de votre base de données.

$destinataires = [ "FCM-CLIENT-TOKEN-USER-1", "FCM-CLIENT-TOKEN-USER-2" ];   $message = nouveau message(); $message -> setNotification "nouvelle notification("Test", "Test"));   foreach ($destinataires en tant que $destinataire) { $message -> addReceipient(nouvel appareil($recipient)); }   $réponse = $client -> envoyer un "$message"; $responseData = $response -> json();   foreach ($responseData["résultats"] comme $i => $résultat) { si (isset($résultat[”erreur”])) { deleteUserFcmToken($recipients[$i]); } }

Ajout de données arbitraires aux notifications

Les messages peuvent inclure des données arbitraires qui doivent être communiquées à l'application client :

$message = nouveau Message(); $message -> setNotification( nouvelle notification( "Breaking News!", "A breaking news story is available." ) ); $message -> setData([ "uri" => "/news/dernières-histoires" ]);

Le code côté client peut accéder à ces données pour effectuer différentes actions lorsqu'une notification est reçue.

Définition des priorités des messages

FCM prend en charge un système de priorité des messages qui vous permet de demander une livraison immédiate à l'appareil cible. Lorsque le mode haute priorité est utilisé, FCM tente de réveiller les appareils Android en veille pour gérer la notification, même si l'activité en arrière-plan est supprimée.

//Indique un message prioritaire $message -> setPriority(”élevée”);

Cet attribut doit être utilisé avec précaution. Si vous envoyez trop de messages prioritaires qui n'entraînent pas d'interactions avec l'utilisateur, vos diffusions seront dépriorisées à la place. Le mécanisme est destiné aux charges utiles véritablement importantes qui doivent briser l'économie de batterie d'un appareil, la limitation du réseau et les restrictions d'activité en arrière-plan.

iOS gère les priorités différemment. Vous obtiendrez une erreur si vous essayez d'envoyer un message hautement prioritaire à un appareil iOS. Vous pouvez utiliser les valeurs normales ou 5, cette dernière indiquant qu'une livraison prioritaire est préférée.

Time to Live

La durée de vie (TTL) d'une instance de message détermine la durée pendant laquelle elle reste pertinente. FCM ne sera pas toujours en mesure de fournir des notifications en temps opportun. L'appareil cible peut être hors ligne ou dans un état d'économie de batterie. FCM continuera d'essayer d'envoyer la notification, mais ce n'est pas toujours un comportement souhaitable. Certaines notifications telles que les rappels d'expiration peuvent ne pas être pertinentes pour l'utilisateur au moment où il les reçoit.

Utilisez la méthode setTimeToLive() pour définir la durée de vie de vos messages. FCM cessera d'essayer de les livrer après l'expiration du TTL.

$message = new Message(); $message -> setNotification( nouvelle notification( "Rotation du serveur prévue à 12h", "Annuler dans les 10 prochaines minutes" ) ); $message -> setTimeToLive(600);

Badges sur iOS

iOS utilise des badges rouges sur les icônes de l'écran d'accueil pour indiquer le nombre de notifications non lues disponibles dans l'application. Vous pouvez modifier le badge numérique de votre application avec la méthode setBadge() sur un objet Notification :

$message = nouveau message(); $notification = nouvelle notification( "Rotation du serveur prévue à 12h", "Annuler dans les 10 prochaines minutes" ); $notification -> setBadge(1); $message -> setNotification($notification); $message -> setTimeToLive(600);

La classe Notification a également des méthodes pour d'autres comportements spécifiques à la plate-forme. Vous pouvez modifier l'icône de notification sur les appareils Android (setIcon()), attribuer un son à jouer (setSound()) et utiliser des balises (setTag()) pour contrôler si les notifications précédentes sont remplacées par la nouvelle diffusion. Ces propriétés et les particularités de leurs implémentations de plate-forme sont décrites dans la documentation de l'API FCM.

Conclusion

FCM est un moyen idéal pour commencer à envoyer des notifications push aux appareils mobiles à partir d'un backend PHP. Il gère les interactions avec les implémentations push spécifiques à la plate-forme telles que APNS et les services Google Play, réduisant ainsi la quantité de code que vous devez écrire.

La bibliothèque PHP Firebase Cloud Messaging encapsule l'API FCM dans des classes et des méthodes PHP pratiques. . Pour un contrôle plus avancé, vous pouvez appeler l'API FCM directement via une bibliothèque PHP HTTP telle que Guzzle. Vous devrez peut-être adopter cette approche si vous avez besoin d'utiliser des options de notification qui ne sont pas exposées par PHP-FCM.

LIRE LA SUITE

  • › Jusqu'où peut aller une voiture électrique avec une seule charge ?
  • › "Atari était très, très dur" Nolan Bushnell sur Atari, 50 ans plus tard
  • &rsaquo ; Combien coûte la recharge d'une batterie ?
  • &rsaquo ; 4 façons dont vous endommagez la batterie de votre ordinateur portable
  • › Ces gadgets bannissent les moustiques
  • &rsaquo ; Avis sur PrivadoVPN : perturber le marché ?