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?
让我开门见山,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?