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;
}
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,
),
);
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 .
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.