8
votes

Erreur dans remotemessage.getnotification (). Obtention ()

J'ai mis en œuvre la messagerie en cloud Firebase dans mon application et tout en utilisant la console Firebase, mon application dans Android et iOS reçoit mes notifications. Mais parce que je voulais pousser la notification quotidienne, j'ai créé un travail cron pour le faire de mon 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 () 'sur une référence objet nulle

où il se trouve dans mon FirebasemessagingService < / code> voici mon code xxx

et dans mon côté serveur xxx

Je me demande pourquoi suis-je Avoir une NPE et comment puis-je le résoudre?


4 commentaires

Où est l'objet de notification dans votre message $?


@sinense je n'ai pas notification objet, je pensais data est suffisant, car notification est facultatif. Dois-je l'ajouter dans mon $ message ? Que dois-je mettre dans notification objet?


Oui L'objet de notification est par défaut en option. Mais sur votre surmessagereceived (), vous appelez RemoteMessage.getNotification () mais vous n'avez pas d'objet de notification à analyser.


@sinense ça marche maintenant merci! :)


4 Réponses :


29
votes

Essayez d'ajouter un objet de notification sur votre message $. Le corps de votre demande postale doit être quelque chose comme: xxx

votre remotemessage.getnotification () retourne null parce que le corps de votre message demande ne contient pas d'objet de notification.

Utilisez des notifications lorsque vous souhaitez que FCM gère l'affichage d'une notification sur le nom de votre application client. Utilisez des messages de données lorsque votre application gère l'affichage ou traiter les messages de votre application client Android, ou si vous souhaitez envoyer des messages aux périphériques iOS lorsqu'il existe une connexion FCM directe.

vérifier le Documentation pour des options de messagerie avancées pour votre référence.


1 commentaires

Tu es incroyable



1
votes
if (remoteMessage.getNotification() != null) {
   sendNotification(remoteMessage.getNotification().getBody());
}

1 commentaires

Les gens ont donné un vote négatif à ce sujet, mais c'est une réponse réelle, tout ce que vous voulez vérifier si GetNotification () renvoie NULL, sinon, vous pouvez demander au corps.



1
votes
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 commentaires

0
votes

J'ai fait face au même problème et j'ai découvert la solution à travers peu d'expériences.

J'utilise le backend de nœud où mon exemple de poussée (prise de Google Firebase) ressemble à: p>

const message = {
    data: {score: '850', time: '2:45'},
    tokens: nTokenArray
}


0 commentaires