在安卓应用程序上从GCM升级到FCM-强制关闭应用程序后,新服务处于活动状态



我从GCM升级到FCM,现在我正在测试升级用户的体验

我有以下步骤

  1. 安装支持GCM的应用程序版本
  2. 升级至支持FCM的新版本
  3. Firebase控制台上发送推送消息

问题是我在设备的通知区域看到了收到的消息,但它没有调用代码CloudMessagingListenerService extends FirebaseMessagingService我在CloudMessagingListenerService#onMessageReceived的开头有一个调试日志

在我转到应用程序信息并选择强制停止并重新打开应用程序后,CloudMessagingListenerService#onMessageReceived中的代码将被正确调用。

任何导致这种情况的原因以及如何避免强制杀死的想法(我的用户不会自愿这么做(

在这两种情况下,应用程序都在后台

更新:

问题是从Firebase控制台接收消息。

我在CloudMessagingListenerService#onCreateCloudMessagingListenerService#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(),而不管应用程序是否处于前台/后台。

最新更新