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

PubNub Push Notification sends incorrect data on Android

让我开门见山,Firebase Cloud Messaging 和 Android Oreo 在使用它们的 API 时发生了一些重大变化。

我已经在 PubNub 控制台中输入了我的 Firebase 服务器 Api 键,推送通知在 Firebase 控制台上工作得很好,但是当使用 PubNub 发布通知时,remoteMessage.toString 给出 => com.google.firebase.messaging.RemoteMessage@ffe9xxx 在 OnMessageReceived 函数中。

我正在发布这样的东西

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..

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

接收端代码

有一个 class 扩展了 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() );
 }

Android getData 对比 getNotification API

您将 notification key/value 嵌套在 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?