让我直截了当地谈到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() );
}
答案 0 :(得分:2)
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?