让我直截了当地谈一谈,firebase云消息和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() );
}
最佳答案
androidgetData
vsgetNotification
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
包含在已发布的消息负载中)。有关对FCM(GCM)或APONS与Pubnub问题进行故障排除的完整详细信息,请查看How can I troubleshoot my push notification issues?