Como enviar notificações push móveis com PHP e Firebase
O serviço Firebase Cloud Messaging (FCM) do Google é uma maneira gratuita e conveniente de distribuir notificações push para dispositivos móveis. Ele funciona com iOS, Android e destinos da Internet, abstraindo as diferenças entre as plataformas. Você envia seu payload uma vez para a API do Firebase e recebe entrega em pace actual para todos os seus usuários.
Neste artigo, mostraremos como usar o Firebase para enviar notificações push do seu código PHP do lado do servidor. Estamos usando o terceiro php-firebase-cloud-messaging
(PHP-FCM) para simplificar ainda mais a integração do Firebase.
Delineando a Arquitetura
O envio bem-sucedido de uma notificação por push requer que vários componentes funcionem juntos. Primeiro, você precisa de uma conta ativa do Firebase com um projeto que tenha o FCM ativado. Vamos configurar isso nas etapas a seguir. Você receberá uma chave de servidor que seu back-end PHP deve incluir com suas solicitações do Firebase.
Você também precisará de um aplicativo que use o SDK do Firebase para produzir um token de registro de cliente. Este token deve ser enviado ao seu backend PHP. Persista em seu banco de dados junto com as informações que identificam o cliente, como seu ID de usuário conectado em seu aplicativo.
Como este artigo se concentra na integração de back-end, vamos supor que você já tenha um aplicativo cliente do Firebase que se inscreve em notificações e recupera um token de registro. Você pode seguir a documentação para criar um aplicativo Android básico se precisar de um projeto de amostra. No código do lado do cliente, envie o token do Firebase para um endpoint de API que você criará em seu serviço PHP.
Assim que tiver alguns tokens de cliente disponíveis em seu servidor, você poderá enviar notificações push fazendo solicitações HTTP para a API do FCM. O Firebase mediará com as plataformas de entrega de notificações individuais, enviando seu alerta para os dispositivos especificados. O FCM mapeia internamente cada token de cliente para a plataforma correta, como Google Play Products and services para Android e Apple Push Notification Carrier (APNS) para iOS.
Criando seu projeto do Firebase
Vá para o Firebase Console, faça login e clique em “Upload venture” para começar a configurar sua integração. Dê um nome ao seu projeto e clique nos activates de configuração inicial. Clique na engrenagem de configurações no canto awesome esquerdo quando chegar ao painel. Escolha “Configurações do projeto” no menu que aparece.
Vá para a guia “Cloud Messaging” e anote sua chave do servidor. Seu serviço PHP usará essa credencial para enviar notificações à API do Firebase.
Você precisa registrar seus aplicativos móveis no console do Firebase. De volta à página inicial, use os botões “Adicionar um aplicativo” para adicionar seus componentes iOS e Android. Siga o assistente de configuração para fornecer os dados do seu aplicativo e fazer o obtain do arquivo de configuração do Firebase. Isso deve ser referenciado ao inicializar o Firebase no código do lado do cliente.
Se você estiver criando um aplicativo para iOS, precisará vincular manualmente sua chave APNS ao Firebase. Clique na engrenagem de configurações no canto awesome esquerdo, escolha “Configurações do projeto” e navegue de volta para “Cloud Messaging”. Uma seção “Aplicativos da Apple” aparecerá quando você tiver um componente iOS em seu projeto. Adicione uma chave ou certificado APNS da sua conta de desenvolvedor Apple para concluir a integração. Isso permite que o FCM envie notificações ao APNS em seu nome.
Preparando seu aplicativo PHP
Comece seu projeto PHP adicionando a biblioteca PHP-FCM usando o Composer:
composer require sngrl/php-firebase-cloud-messaging
Dentro do seu código, crie uma instância de PHP-FCM’s Consumer
classe:
use sngrlPhpFirebaseCloudMessagingClientClient; $shopper = new Consumer(); $shopper -> setApiKey("FCM-SERVER-KEY"); $shopper -> injectGuzzleHttpClient(new GuzzleHttpClient());
Passe o setApiKey()
a chave do servidor que você copiou do console de API do Firebase. Em um aplicativo actual, isso deve ser armazenado de forma segura e tratado como um segredo confidencial.
O PHP-FCM depende de uma instância Guzzle injetada para fazer suas solicitações HTTP. O Guzzle é incluído automaticamente como uma dependência para que você não exact instalá-lo manualmente. Estamos construindo um novo cliente Guzzle no exemplo acima; você pode reutilizar uma instância existente se já tiver o Guzzle em seu aplicativo.
O FCM Consumer
instância agora está pronta para enviar notificações para sua conta do FCM.
Registrando tokens de cliente
As notificações são distribuídas para tokens de cliente que representam os dispositivos de seus usuários. Conforme explicado acima, você precisará expor um endpoint de API em seu aplicativo que permita que seus aplicativos cliente enviem seu token FCM depois que o usuário fizer login.
Aqui está um exemplo básico de como isso pode ser:
$token = $_POST["fcmToken"]; $userId = ((int) $_POST["userId"]); /** * Name a serve as which persists a person/token * affiliation on your database */ saveUserFcmToken($userId, $token);
Para enviar uma notificação por push para cada dispositivo registrado, selecione todos os tokens em seu armazenamento de dados. Você pode enviar para um usuário específico recuperando os tokens associados ao seu ID. Isso exibiria a notificação em todos os dispositivos nos quais eles efetuaram login, que geralmente é o comportamento pretendido.
Envio de notificações
O PHP-FCM abstrai cada entrega de notificação em um Message
objeto. Isso envolve um Notification
– contendo o texto que é mostrado ao usuário – e quaisquer opções de entrega que você fornecer.
Get ready seu Notification
primeiro:
use sngrlPhpFirebaseCloudMessagingClientNotification; $notification = new Notification( "Notification Name", "The longer textual content of the notification, displayed beneath the identify." );
A seguir crie um Message
para representar a entrega da notificação:
use sngrlPhpFirebaseCloudMessagingClientMessage; $message = new Message(); $message -> setNotification($notification);
Antes de enviar sua mensagem, adicione um ou mais destinatários. o addRecipient()
método leva um Tool
instância; esta classe precisa de um dos seus tokens de cliente FCM como seu parâmetro de construtor:
use sngrlPhpFirebaseCloudMessagingClientRecipientDevice; $message -> addReceipient(new Tool("FCM-CLIENT-TOKEN-USER-1")); $message -> addReceipient(new Tool("FCM-CLIENT-TOKEN-USER-2"));
Agora você está pronto para enviar a mensagem usando o Consumer
criado anteriormente:
$shopper -> ship($message);
A notificação será entregue aos dispositivos que você adicionou como destinatários.
Aqui está um exemplo completo que envolve o código de manipulação de notificação em uma função conveniente:
use sngrlPhpFirebaseCloudMessagingClientClient; use sngrlPhpFirebaseCloudMessagingClientMessage; use sngrlPhpFirebaseCloudMessagingClientNotification; use sngrlPhpFirebaseCloudMessagingClientRecipientDevice; $shopper = new Consumer(); $shopper -> setApiKey("FCM-SERVER-KEY"); $shopper -> injectGuzzleHttpClient(new GuzzleHttpClient()); serve as sendNotification( Consumer $shopper, string $identify, string $frame, string ...$clientTokens) : void $message = new Message(); $message -> setNotification( new Notification( $identify, $frame ) ); foreach ($clientTokens as $clientToken) $message -> addRecipient(new Tool($clientToken)); $shopper -> ship($message); sendNotification($shopper, "Hi International", "Check Notification", "FCM-CLIENT-TOKEN-1");
Como lidar com dados de resposta do FCM
o Consumer::ship()
O método retorna o objeto de resposta HTTP para a solicitação de notificação. Você pode inspecionar os dados de resposta codificados em JSON para determinar se suas notificações foram entregues com sucesso.
$message = new Message(); $message -> setNotification(new Notification("Check", "Check")); $message -> addReceipient(new Tool("FCM-CLIENT-TOKEN-USER-1")); $message -> addReceipient(new Tool("FCM-CLIENT-TOKEN-USER-2")); $reaction = $shopper -> ship($message); $responseData = $reaction -> json();
A matriz de dados de resposta tem uma estrutura semelhante à seguinte:
"good fortune": 1, "failure": 1, "effects": [ "message_id": 100 , "error": "InvalidRegistration" ]
o effects
array contém um objeto que representa o standing de entrega de cada um dos dispositivos para os quais você tentou enviar. Isso corresponderá à ordem dos destinatários adicionados ao Message
através do addRecipient()
método. O exemplo de JSON acima indica que apenas o primeiro dispositivo recebeu a notificação. A segunda entrega falhou, então você deve remover o token do dispositivo do seu banco de dados.
$recipients = [ "FCM-CLIENT-TOKEN-USER-1", "FCM-CLIENT-TOKEN-USER-2" ]; $message = new Message(); $message -> setNotification(new Notification("Check", "Check")); foreach ($recipients as $recipient) $message -> addReceipient(new Tool($recipient)); $reaction = $shopper -> ship($message); $responseData = $reaction -> json(); foreach ($responseData["results"] as $i => $end result) if (isset($end result["error"])) deleteUserFcmToken($recipients[$i]);
Adicionando dados arbitrários às notificações
As mensagens podem incluir dados arbitrários que precisam ser comunicados ao aplicativo cliente:
$message = new Message(); $message -> setNotification( new Notification( "Breaking Information!", "A breaking information tale is to be had." ) ); $message -> setData([ "uri" => "/news/latest-stories" ]);
O código do lado do cliente pode acessar esses dados para realizar ações diferentes quando uma notificação é recebida.
Definindo prioridades de mensagem
O FCM oferece suporte a um sistema de prioridade de mensagens que permite solicitar uma entrega imediata ao dispositivo de destino. Quando o modo de alta prioridade é usado, o FCM tenta ativar dispositivos Android adormecidos para lidar com a notificação, mesmo que a atividade em segundo plano esteja sendo suprimida.
// Point out a high-priority message $message -> setPriority("excessive");
Este atributo deve ser usado com cuidado. O envio de muitas mensagens prioritárias que não resultam em interações do usuário fará com que suas entregas sejam despriorizadas. O mecanismo destina-se a cargas úteis genuinamente importantes que precisam romper a economia de bateria de um dispositivo, a limitação da rede e as restrições de atividade em segundo plano.
O iOS lida com as prioridades de maneira diferente. Você receberá um erro se tentar enviar um excessive
mensagem de prioridade para um dispositivo iOS. Você pode usar os valores commonplace
ou 5
o último indicando uma entrega de alta prioridade é o preferido.
Pace de Viver
UMA Message
o Time to Reside (TTL) da instância determina por quanto pace ela permanece relevante. O FCM nem sempre poderá entregar notificações em pace hábil. O dispositivo de destino pode estar offline ou em um estado de economia de bateria. O FCM continuará tentando entregar a notificação, mas isso nem sempre é um comportamento desejável. Algumas notificações, como lembretes de expiração, podem ser irrelevantes para o usuário no momento em que são recebidas.
Use o setTimeToLive()
método para definir a vida útil de suas mensagens. O FCM parará de tentar entregá-los depois que o TTL expirar.
$message = new Message(); $message -> setNotification( new Notification( "Server rotation scheduled for 12pm", "Cancel inside the subsequent 10 mins." ) ); $message -> setTimeToLive(600);
Selos no iOS
O iOS america emblemas vermelhos nos ícones da tela inicial para indicar o número de notificações não lidas disponíveis no aplicativo. Você pode alterar o selo numérico do seu aplicativo com o setBadge()
método em um Notification
objeto:
$message = new Message(); $notification = new Notification( "Server rotation scheduled for 12pm", "Cancel inside the subsequent 10 mins." ); $notification -> setBadge(1); $message -> setNotification($notification); $message -> setTimeToLive(600);
o Notification
magnificence também tem métodos para outros comportamentos específicos da plataforma. Você pode alterar o ícone da notificação em dispositivos Android (setIcon()
), atribua um som a ser reproduzido (setSound()
) e use tags (setTag()
) para controlar se as notificações anteriores são substituídas pela nova entrega. Essas propriedades e as peculiaridades de suas implementações de plataforma são descritas na documentação da API do FCM.
Conclusão
O FCM é uma maneira best de começar a enviar notificações push para dispositivos móveis a partir de um back-end PHP. Ele lida com interações com implementações push específicas da plataforma, como APNS e Google Play Products and services, reduzindo a quantidade de código que você precisa escrever.
A biblioteca PHP Firebase Cloud Messaging envolve a API FCM em categories e métodos PHP convenientes. Para um controle mais avançado, você pode chamar a API do FCM diretamente por meio de uma biblioteca PHP HTTP, como Guzzle. Você pode ter que usar essa abordagem se precisar usar opções de notificação que não são expostas pelo PHP-FCM.
Fonte da Notícia: www.howtogeek.com