Come inviare notifiche push mobili con PHP e Firebase

0
293
McLittle Stock/Shutterstock.com

Il servizio Firebase Cloud Messaging (FCM) di Google è un modo conveniente e gratuito per distribuire notifiche push su dispositivi mobili. Funziona con iOS, Android e target web, astraendo le differenze tra le piattaforme. Invii il tuo carico utile una volta all'API di Firebase e ricevi la consegna in tempo reale a tutti i tuoi utenti.

In questo articolo, mostreremo come utilizzare Firebase per inviare notifiche push dal codice PHP lato server. Stiamo utilizzando la libreria php-firebase-cloud-messaging (PHP-FCM) di terze parti per semplificare ulteriormente l'integrazione con Firebase.

Delineare l'architettura< /h2>

L'invio corretto di una notifica push richiede che diversi componenti funzionino insieme. Innanzitutto è necessario un account Firebase attivo con un progetto in cui è abilitato FCM. Lo configureremo nei seguenti passaggi. Ti verrà rilasciata una chiave del server che il tuo backend PHP deve includere con le sue richieste Firebase.

Avrai anche bisogno di un'app che utilizzi l'SDK Firebase per produrre un token di registrazione del client. Questo token dovrebbe essere inviato al tuo backend PHP. Mantienilo nel tuo database insieme alle informazioni che identificano il client, come il suo ID utente connesso all'interno della tua applicazione.

Poiché questo articolo è incentrato sull'integrazione del back-end, presumiamo che tu abbia già un'app client Firebase che si iscrive alle notifiche e recupera un token di registrazione. Puoi seguire la documentazione per creare un'app Android di base se hai bisogno di un progetto di esempio. All'interno del tuo codice lato client, invia il token Firebase a un endpoint API che creerai nel tuo servizio PHP.

Una volta che hai alcuni token client disponibili sul tuo server, puoi inviare notifiche push effettuando richieste HTTP all'API FCM. Firebase fungerà da mediatore con le singole piattaforme di invio delle notifiche, inviando l'avviso ai dispositivi specificati. FCM associa internamente ogni token client alla piattaforma corretta, come Google Play Services per Android e Apple Push Notification Service (APNS) per iOS.

Creazione di Firebase Progetto

Vai alla console Firebase, accedi e fai clic su “Aggiungi progetto” per iniziare a configurare la tua integrazione. Assegna un nome al tuo progetto e fai clic sui prompt di configurazione iniziale. Fai clic sull'ingranaggio delle impostazioni in alto a sinistra quando raggiungi la dashboard. Scegli “Impostazioni progetto” dal menu che appare.

Vai al &# 8220;Messaggistica cloud” scheda e annotare la chiave del server. Il tuo servizio PHP utilizzerà questa credenziale per inviare notifiche all'API Firebase.

Devi registrare le tue applicazioni mobili nella console Firebase. Tornando alla home page, utilizza “Aggiungi un'app” pulsanti per aggiungere i tuoi componenti iOS e Android. Segui la procedura guidata di configurazione per fornire i dati della tua app e scaricare il relativo file di configurazione di Firebase. Questo dovrebbe essere fatto riferimento quando inizializzi Firebase nel tuo codice lato client.

Se stai creando un'app iOS, devi collegare manualmente la tua chiave APNS a Firebase. Fai clic sull'ingranaggio delle impostazioni in alto a sinistra, scegli “Impostazioni progetto,” e torna a “Cloud Messaging.” Un “App Apple” apparirà quando hai un componente iOS nel tuo progetto. Aggiungi una chiave APNS o un certificato dal tuo account sviluppatore Apple per completare l'integrazione. Ciò consente a FCM di inviare notifiche ad APNS per tuo conto.

Preparare la tua applicazione PHP

Inizia il tuo progetto PHP aggiungendo la libreria PHP-FCM usando Composer:

composer require sngrl/php-firebase-cloud-messaging

All'interno del tuo codice, crea un'istanza della classe Client di PHP-FCM:

use sngrlPhpFirebaseCloudMessagingClientClient;   $cliente = nuovo cliente(); $cliente -> setApiKey("FCM-SERVER-KEY"); $cliente -> injectGuzzleHttpClient(new GuzzleHttpClient());

Passa al metodo setApiKey() la chiave del server che hai copiato dalla console dell'API Firebase. In un'applicazione reale, questo dovrebbe essere archiviato in modo sicuro e trattato come un segreto confidenziale.

PHP-FCM si basa su un'istanza di Guzzle iniettata per effettuare le sue richieste HTTP. Guzzle viene automaticamente incluso come dipendenza, quindi non è necessario installarlo manualmente. Stiamo costruendo un nuovo client Guzzle nell'esempio sopra; puoi riutilizzare un'istanza esistente se hai già Guzzle nella tua applicazione.

L'istanza del client FCM è ora pronta per inviare notifiche al tuo account FCM.

Registrazione dei token client

Le notifiche vengono distribuite ai token client che rappresentano il tuo utenti’ dispositivi. Come spiegato in precedenza, devi esporre un endpoint API nella tua applicazione che consenta alle app client di inviare il proprio token FCM dopo che l'utente ha effettuato l'accesso.

Ecco un esempio di base di ciò che questo potrebbe assomigliare a:

$token = $_POST["fcmToken"]; $userId = ((int) $_POST["userId"]);   /** * Chiama una funzione che mantiene un'associazione utente/token * al tuo database */saveUserFcmToken($userId, $token);

Per inviare una notifica push a ogni dispositivo registrato, seleziona tutti i token nel tuo datastore. Puoi inviare a un utente specifico recuperando i token associati al suo ID. Ciò visualizzerebbe la notifica su tutti i dispositivi su cui hanno effettuato l'accesso, che di solito è il comportamento previsto.

Invio di notifiche

PHP-FCM astrae ogni consegna di notifica in un oggetto Messaggio. Questo avvolge una notifica – contenente il testo mostrato all'utente – e tutte le opzioni di consegna che fornisci.

Prepara prima la tua notifica:

utilizzare sngrlPhpFirebaseCloudMessagingClientNotification;   $notifica = nuova notifica( "Titolo della notifica", "Il testo più lungo della notifica, visualizzato sotto il titolo." );

Quindi crea un messaggio per rappresentare la consegna della notifica:

usa sngrlPhpFirebaseCloudMessagingClientMessage;   $messaggio = nuovo messaggio(); $messaggio -> setNotifica($notifica);

Prima di inviare il tuo messaggio, aggiungi uno o più destinatari. Il metodo addRecipient() accetta un'istanza Device; questa classe ha bisogno di uno dei tuoi token client FCM come parametro del costruttore:

utilizzare sngrlPhpFirebaseCloudMessagingClientRecipientDevice;   $messaggio -> addReceipient(nuovo dispositivo("FCM-CLIENT-TOKEN-USER-1")); $messaggio -> addReceipient(nuovo dispositivo("FCM-CLIENT-TOKEN-USER-2"));

Ora sei pronto per inviare il messaggio utilizzando il client creato in precedenza:

$client -> invia($messaggio);

La notifica verrà inviata ai dispositivi che hai aggiunto come destinatari.

Ecco un esempio completo che racchiude il codice di gestione delle notifiche in una comoda funzione:

utilizzare sngrlPhpFirebaseCloudMessagingClientClient; usa sngrlPhpFirebaseCloudMessagingClientMessage; utilizzare sngrlPhpFirebaseCloudMessagingClientNotification; utilizzare sngrlPhpFirebaseCloudMessagingClientRecipientDevice;   $cliente = nuovo cliente(); $cliente -> setApiKey("FCM-SERVER-KEY"); $cliente -> injectGuzzleHttpClient(new GuzzleHttpClient());   funzione sendNotification( Cliente $client, stringa $titolo, stringa $corpo, stringa …$clientTokens) : vuoto {   $messaggio = nuovo messaggio();   $messaggio -> setNotifica( nuova notifica( $titolo, $corpo ) );   foreach ($clientToken come $clientToken) { $messaggio -> addRecipient(nuovo dispositivo($clientToken)); }   $cliente -> invia($messaggio);   }   sendNotification($client, "Hello World", "Test Notification", "FCM-CLIENT-TOKEN-1");

Gestione dei dati di risposta FCM

Il metodo Client::send() restituisce l'oggetto risposta HTTP per la richiesta di notifica. Puoi esaminare i dati di risposta con codifica JSON per determinare se le tue notifiche sono state consegnate correttamente.

$messaggio = nuovo messaggio(); $messaggio -> setNotification(nuova notifica("Test", "Test")); $messaggio -> addReceipient(nuovo dispositivo("FCM-CLIENT-TOKEN-USER-1")); $messaggio -> addReceipient(nuovo dispositivo("FCM-CLIENT-TOKEN-USER-2"));   $risposta = $cliente -> invia($messaggio); $dati di risposta = $dati di risposta -> json();

L'array di dati di risposta ha una struttura simile alla seguente:

{ "success": 1, "fallimento": 1, "risultati": [ { "ID_messaggio": 100 }, { "errore": "Registrazione non valida" } ] }

L'array dei risultati contiene un oggetto che rappresenta lo stato di consegna di ciascuno dei dispositivi a cui si è tentato di inviare. Questo corrisponderà all'ordine dei destinatari aggiunti al messaggio tramite il metodo addRecipient(). Il JSON di esempio sopra indica che solo il primo dispositivo ha ricevuto la notifica. La seconda consegna non è riuscita, quindi dovresti rimuovere il token del dispositivo dal tuo database.

$destinatari = [ "FCM-CLIENT-TOKEN-USER-1", "FCM-CLIENT-TOKEN-USER-2" ];   $messaggio = nuovo messaggio(); $messaggio -> setNotification(nuova notifica("Test", "Test"));   foreach ($destinatari come $destinatario) { $messaggio -> addReceipient(nuovo dispositivo($destinatario)); }   $risposta = $cliente -> invia($messaggio); $dati di risposta = $dati di risposta -> json();   foreach ($responseData["risultati"] come $i => $risultato) { se (isset($risultato["errore"])) { deleteUserFcmToken($destinatari[$i]); } }

Aggiunta di dati arbitrari alle notifiche

I messaggi possono includere dati arbitrari che devono essere comunicati all'applicazione client:

$message = nuovo messaggio(); $messaggio -> setNotifica( nuova notifica( "Ultime notizie!", "È disponibile una notizia dell'ultima ora." ) ); $messaggio -> setData([ "uri" => "/notizie/ultime-storie" ]);

Il codice lato client può accedere a questi dati per intraprendere diverse azioni quando viene ricevuta una notifica.

Impostazione delle priorità dei messaggi

FCM supporta un sistema di priorità dei messaggi che ti consente di richiedere una consegna immediata al dispositivo di destinazione. Quando viene utilizzata la modalità ad alta priorità, FCM tenta di riattivare i dispositivi Android addormentati per gestire la notifica, anche se l'attività in background viene soppressa.

//Indica un messaggio con priorità alta $messaggio -> setPriority("alta");

Questo attributo deve essere utilizzato con attenzione. L'invio di troppi messaggi prioritari che non comportano interazioni con l'utente comporterà invece la depriorizzazione delle consegne. Il meccanismo è destinato a carichi utili veramente importanti che devono superare il risparmio della batteria di un dispositivo, la limitazione della rete e le limitazioni delle attività in background.

iOS gestisce le priorità in modo diverso. Riceverai un errore se provi a inviare un messaggio con priorità alta a un dispositivo iOS. Puoi utilizzare i valori normale o 5, quest'ultimo indica che è preferibile una consegna ad alta priorità.

Time to Live

Il Time to Live (TTL) di un'istanza di messaggio determina per quanto tempo rimane rilevante. FCM non è sempre stato in grado di inviare le notifiche in modo tempestivo. Il dispositivo di destinazione potrebbe essere offline o in stato di risparmio della batteria. FCM continuerà a provare a inviare la notifica, ma questo non è un comportamento sempre auspicabile. Alcune notifiche come i promemoria di scadenza potrebbero essere irrilevanti per l'utente nel momento in cui le ricevono.

Utilizza il metodo setTimeToLive() per definire la durata dei tuoi messaggi. FCM interromperà i tentativi di consegna dopo la scadenza del TTL.

$message = new Message(); $messaggio -> setNotifica( nuova notifica( "Rotazione del server programmata per le 12:00", "Annulla entro i prossimi 10 minuti." ) ); $messaggio -> setTimeToLive(600);

Badge su iOS

iOS utilizza badge rossi sulle icone della schermata iniziale per indicare il numero di notifiche non lette disponibili all'interno dell'app. Puoi modificare il badge numerico della tua app con il metodo setBadge() su un oggetto di notifica:

$messaggio = nuovo messaggio(); $notifica = nuova notifica( "Rotazione del server programmata per le 12:00", "Annulla entro i prossimi 10 minuti." ); $notifica -> setBadge(1); $messaggio -> setNotifica($notifica); $messaggio -> setTimeToLive(600);

La classe Notification ha metodi anche per altri comportamenti specifici della piattaforma. Puoi modificare l'icona della notifica sui dispositivi Android (setIcon()), assegnare un suono da riprodurre (setSound()) e utilizzare i tag (setTag()) per controllare se le notifiche precedenti vengono sostituite dalla nuova consegna. Queste proprietà e le particolarità delle loro implementazioni della piattaforma sono descritte nella documentazione dell'API di FCM.

Conclusione

FCM è un modo ideale per iniziare a inviare notifiche push ai dispositivi mobili da un backend PHP. Gestisce le interazioni con implementazioni push specifiche della piattaforma come APNS e Google Play Services, riducendo la quantità di codice da scrivere.

La libreria PHP Firebase Cloud Messaging racchiude l'API FCM in comode classi e metodi PHP . Per un controllo più avanzato, puoi chiamare l'API FCM direttamente tramite una libreria HTTP PHP come Guzzle. Potrebbe essere necessario adottare questo approccio se è necessario utilizzare opzioni di notifica che non sono esposte da PHP-FCM.

LEGGI SUCCESSIVO

  • › Quanto lontano può arrivare un'auto elettrica con una sola carica?
  • › “Atari era molto, molto difficile” Nolan Bushnell su Atari, 50 anni dopo
  • › Quanto costa ricaricare una batteria?
  • › 4 modi in cui stai danneggiando la batteria del tuo laptop
  • › Questi gadget scacciano le zanzare
  • › Recensione PrivadoVPN: sconvolgere il mercato?