我从GCM升级到FCM,现在我正在测试升级用户的体验
我有以下步骤
- 安装支持GCM的应用程序版本
- 升级至支持FCM的新版本
- 在Firebase控制台上发送推送消息
问题是我在设备的通知区域看到了收到的消息,但它没有调用代码CloudMessagingListenerService extends FirebaseMessagingService
我在CloudMessagingListenerService#onMessageReceived
的开头有一个调试日志
在我转到应用程序信息并选择强制停止并重新打开应用程序后,CloudMessagingListenerService#onMessageReceived
中的代码将被正确调用。
任何导致这种情况的原因以及如何避免强制杀死的想法(我的用户不会自愿这么做(
在这两种情况下,应用程序都在后台
更新:
问题是从Firebase控制台接收消息。
我在CloudMessagingListenerService#onCreate
和CloudMessagingListenerService#onDestroy
中添加了日志,我可以看到它们被调用时有100ms的时间差,而CloudMessagingListenerService#onMessageReceived
没有被调用,所以看起来FirebaseMessagingService
决定处理通知,而不是数据部分
关于服务器发送的消息:这是我从服务器发送的json-数据部分正确地传播到我的代码中,但通知被忽略,当我检查remoteMessage.getNotification()
的内容时,我得到null
{
"to": "my token",
"collapse_key": "my app",
"notification": {
"title": "server title",
"body": "server text"
},
"data": {
"tag": "debug",
"action": "custom-push",
...
}
}
Firebase控制台在notification
密钥中发送消息,这意味着只有当应用程序在前台/打开时,消息才会传递到onMessageReceived()
。如果应用程序在后台运行,则通知将直接显示在通知抽屉上
要在扩展FirebaseMessagingService
的类的onMessageReceived()
中接收有效载荷,请确保通知内容已在向FCM服务器发出的请求的data
密钥中传递。这将确保有效载荷被传递到onMessageReceived()
,而不管应用程序是否处于前台/后台。