PubNub推送通知在Android上发送不正确的数据

时间:2018-02-18 23:11:24

标签: android firebase firebase-cloud-messaging pubnub

让我直截了当地谈到Firebase Cloud Messaging和Android Oreo在使用他们的API方面发生了一些重大变化。

我已在PubNub控制台中输入我的Firebase服务器Api密钥,推送通知在Firebase控制台上运行正常,但在使用PubNub发布通知时,remoteMessage.toString给出=> OnMessageReceived函数中的com.google.firebase.messaging.RemoteMessage@ffe9xxx

我正在发布类似这样的内容

JsonObject payload = new JsonObject();

        JsonObject androidData = new JsonObject();
        androidData.addProperty("contentText","test content");
        androidData.addProperty("contentTitle","Title");

        JsonObject notification = new JsonObject();
        notification.add("notification",androidData);


        JsonObject data = new JsonObject();
        data.add("data", notification);
        payload.add("pn_gcm", data);

PubNubObject.publish()
            .message(payload)
             etc..

知道为什么会这样吗? 提前谢谢。

接收端代码

有一个扩展FirebaseMessagingService的类,代码为OnMessageReceived函数:

if (remoteMessage.getNotification() != null) {
    //for testing firebase notification
    Log.d(TAG, "Message Notification 
    Body:"+remoteMessage.getNotification().getBody());  
 } else {
    //for anything else, I wanted to see what was coming from the server
    //this is where I am getting the message when using PubNub notification
    Log.d(TAG, "onMessageReceived: remoteMessage to 
    str:"+remoteMessage.toString() );
 }

1 个答案:

答案 0 :(得分:2)

Android getData vs getNotification API

您正在将notification键/值嵌套在data键内,只需使用API​​ remoteMessage.getData()而不是remoteMessage.getNotification()

如果notification键位于顶层,则会起作用。 See Android docs here

而不是:

{
 "pn_gcm": {
  "data": {
   "notification": {
    "contentText": "test content",
    "contentTitle": "Title"
   }
  }
 }
}

如果转到remoteMessage.getData()

{
 "pn_gcm": {
  "data": {
    "contentText": "test content",
    "contentTitle": "Title"
  }
 }
}

或者如果坚持remoteMessage.getNotification()

{
 "pn_gcm": {
  "notification": {
    "contentText": "test content",
    "contentTitle": "Title"
   }
  }
 }
}

PubNub基本上只是在发布时查找消息有效负载中的pn_gcm并抓取其中的内容并将其直接传递给Google的FCM服务以获取已注册的设备(使用PubNub )该通道接收GCM(FCM)。

如果数据格式不正确,我们会收到来自FCM的错误,该错误应在频道的-pndebug频道上报告(假设已发布的消息有效负载中包含pn_debug:true

有关使用PubNub解决FCM(GCM)或APONS问题的详细信息,请查看How can I troubleshoot my push notification issues?