web-dev-qa-db-fra.com

Comment implémenter la messagerie cloud Firebase côté serveur?

Après avoir migré vers Firebase, j’ai testé l’envoi de notifications à l’aide de la console Firebase, mais j’ai besoin d’une notification quotidienne à une heure précise. Au lieu d’utiliser la console Firebase, j’utilise mon ancien travail Cron pour envoyer des notifications quotidiennement. J'ai changé https://Android.googleapis.com/gcm/send en https://fcm.googleapis.com/fcm/send mais mon appareil ne reçoit aucune notification. 

Est-ce qu'il y a un moyen de résoudre ceci? Ou ai-je manqué quelque chose? mon travail cron fonctionne bien pour mes appareils qui utilisent encore GCM. 

Voici mon code

function sendNotificationFCM($apiKey, $registrationIDs, $messageText,$id) {


$headers = array(
        'Content-Type:application/json',
        'Authorization:key=' . $apiKey
);

$message = array(
        'registration_ids' => $registrationIDs,
        'data' => array(
                "message" => $messageText,
                "id" => $id,
        ),
);


$ch = curl_init();

curl_setopt_array($ch, array(
        CURLOPT_URL => 'https://fcm.googleapis.com/fcm/send',
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POSTFIELDS => json_encode($message)
));

$response = curl_exec($ch);
curl_close($ch);

return $response;

}

10
natsumiyu

J'ai ajouté l'objet notification dans mon json. J'ai découvert que dans ma remoteMessage.getNotification().getBody(), il renvoie null, c'est pourquoi il ne reçoit aucune notification envoyée par mon cron. 

Modifier

Voici mon objet json 

$message = array(
            'registration_ids' => $registrationIDs,
            'notification' => array(
                                    "title" => $id, 
                                    "body" => $messageText,
                                    "icon" => "name_of_icon" ),
            'data' => array(
                    "message" => $messageText,
                    "id" => $id,
            ),
    );
10
natsumiyu

En plus de changer l'URL comme suit:

https://fcm.googleapis.com/fcm/send

Vous devez également modifier la façon dont vous envoyez les données de la demande:

 Content-Type:application/json
 Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

 {
   "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", // "to" replaces "registration_ids" of gcm in fcm
   "data" : {
   ...
  },
}

Découvrez ce guide complet .

4
abhilvare

Je ne peux pas commenter directement dans la réponse sélectionnée. Tenez compte du fait que le message json change en fonction de ce que vous souhaitez/devez recevoir dans le système d'exploitation du destinataire (Android/iOS).

par exemple, pour qu'Android reçoive les notifications lorsque l'application est en arrière-plan, vous devez ajouter le data json à votre demande.

Pour iOS, la clé de données n'est pas nécessaire, mais vous devez définir la clé notification avec l'indicateur isContentAvailble sur true et la priorité sur High.

Dans la réponse sélectionnée comme valide, vous utilisez la clé registration_ids qui ne devrait être utilisée que lorsque vous envoyez la notification à plusieurs appareils. Vous devriez peut-être jeter un coup d'œil aux notifications de sujets.

0
vicco