web-dev-qa-db-fra.com

Erreur dans remoteMessage.getNotification (). GetBody ()

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? 

6
natsumiyu

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.

25
mgcaguioa
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;
    }
0
pruthwiraj.kadam