J'ai implémenté Firebase Cloud Messaging dans mon application et lors de l'utilisation de la console Firebase, mon application sous Android et iOS reçoit mes notifications. Mais parce que je voulais envoyer des notifications quotidiennement, j'ai créé un travail cron pour le faire côté serveur. Je remarque que chaque fois que je déclenche mon cron, mon application se bloque
Dans mon client iOS, il ne reçoit aucune notification.
Dans mon client Android, il affiche une erreur:
Java.lang.String com.google.firebase.messaging.RemoteMessage$Notification.getBody()' on a null object reference
Où il se trouve dans ma FirebaseMessagingService
voici mon code
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " + remoteMessage.getFrom());
Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());
sendNotification(remoteMessage.getNotification().getBody());
}
Et sur mon serveur
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;
}
Je me demande pourquoi j'ai un NPE et comment puis-je le résoudre?
Essayez d’ajouter un objet de notification à votre message $. Le corps de votre demande POST doit ressembler à ceci:
{
"to" : "aUniqueKey",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
Votre remoteMessage.getNotification()
renvoienull
car le corps de votre demande POST ne contient pas d'objet de notification.
Utilisez les notifications lorsque vous souhaitez que FCM gère l'affichage d'une notification au nom de votre application client. Utilisez des messages de données lorsque vous souhaitez que votre application gère l'affichage ou traite les messages sur votre application client Android, ou si vous souhaitez envoyer des messages à des périphériques iOS lorsqu'une connexion FCM directe est établie.
Consultez le Documentation pour les options de messagerie avancées pour référence.
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,
),
'notification' => array(
"body" => "body of notification",
"title" => "title for notification",
)
);
$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;
}