【问题标题】:Upgrading from GCM to FCM on android app - new service active after force kill of the app在 Android 应用程序上从 GCM 升级到 FCM - 强制终止应用程序后激活新服务
【发布时间】:2018-08-05 12:32:55
【问题描述】:

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

我有以下步骤

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

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

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

知道是什么原因造成的,以及可以做些什么来避免强制杀死(我的用户不会自愿这样做)

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

更新:

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

我在 CloudMessagingListenerService#onCreateCloudMessagingListenerService#onDestroy 中添加了日志,我可以看到它们之间的调用时间差异为 100 毫秒 - 而 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", ... } }

【问题讨论】:

标签: android google-cloud-messaging firebase-cloud-messaging


【解决方案1】:

Firebase 控制台在 notification 键中发送消息,这意味着只有在应用程序在前台/打开状态下运行时才会将消息传递到 onMessageReceived()。如果应用程序在后台运行,则通知将直接显示在通知抽屉上。
要在扩展 FirebaseMessagingService 的类的 onMessageReceived() 中接收有效负载,请确保通知内容在您的请求的 data 键中传递给 FCM 服务器。这将确保无论应用是在前台还是在后台,payload 都会被传递到onMessageReceived()

【讨论】:

  • 在我所描述的场景中,应用程序两次都在后台
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多