android - 我无法再在后台应用程序中收到任何 FCM 消息

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

当我的应用程序处于后台时,我无法再在我的应用程序中接收任何数据消息。 请注意,它直到最近才在我的应用程序中完美运行。也许它在我的开发环境最近更新后停止工作,我不能说....

所以我尝试用 quickstart-android project 进行测试, 看看它的效果如何。

答案是否定的!

我毫不怀疑 quickstart-android 项目配置得很好,可以使用 FCM 功能...

我从 Advanced REST Client 发送以下消息,我成功地使用它来测试我当前发布的应用程序。

{
  "to" : "dLN4paNl3uw:APA91bH0lpkEMxGp...._7EdxkB2cRbPKFxT2Ti3OPw-7fCSwXCSfGG",
  "data": {
    "id": 19,
    "title": "Title test",
    "msg": "Text of the test",
    "code": 2,
  },
  "delay_while_idle" : false,
  "priority" : "high",
  "content_available" : true
}

我能说的是,每当我在应用程序处于后台时发送消息时,我都会在 logcat 中得到以下显示

07-22 12:54:21.400 14316-14316/? W/GCM-DMM: broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10000000 pkg=com.google.firebase.quickstart.fcm (has extras) }

所以消息被设备很好地接收但没有传输到onMessageReceive()。

我看到很多关于此类问题的帖子,但答案总是含糊不清,因为我们只能说它对某些人有效而对其他人无效。 所以我想知道最近是否有人找到了对这个问题的更精确的解释,因为我想知道它是否不能来自开发环境,因为我试图用新更新的工作室、sdk、构建工具和我遇到了同样的问题,新建的应用程序不再接收 GCM/FCM 消息。

编辑

经过更多调查,我在 logcat 中看到,当我从最近的应用程序列表中滑出我的应用程序时,它被强制关闭了。这当然说明它无法处理设备接收到的消息。

07-23 23:12:29.002 671-31254/? I/ActivityManager: Killing 17453:com.google.firebase.quickstart.fcm/u0a297 (adj 9): remove task
07-23 23:12:29.016 14316-14524/? D/GCM: Removing messenger 0:com.google.firebase.quickstart.fcm
07-23 23:12:29.017 671-2998/? I/WindowState: WIN DEATH: Window{2a27cf7 u0 com.google.firebase.quickstart.fcm/com.google.firebase.quickstart.fcm.MainActivity}
07-23 23:12:30.148 671-4851/? I/ActivityManager: Force stopping com.google.firebase.quickstart.fcm appid=10297 user=0: from pid 18289

我还尝试了几周前构建的一个工作项目,该项目基于 GCM 8.4.0、sdk 23、java 1.7,它运行正常,但我遇到了同样的问题;应用程序被强制关闭。

这是在我成功用于测试工作项目的 2 种不同设备上观察到的:nexus 7 LTE 6.0.1 和 GT-9295 5.0.1
我现在看到的唯一区别是 Android Studio/gradle 的版本。工作项目是用 1.5.2 构建的,现在我使用 2.1.2,我无法再构建任何工作应用程序。
我在两台不同的计算机上遇到了这个问题,我在其中一台上重新安装了所有东西!

最佳答案

FCM 有两种类型的通知 Silent 和 Non-Silent:-

静默通知 :- 你总是在onMessageReceived 方法中得到回调

非静默通知:- 当应用程序在前台时,您在 onMessageReceived 方法中收到回调,但当应用程序在后台时,FCM 在通知栏中生成默认通知。

只有数据部分的通知在 FCM 中被视为静默通知。

当您从服务器生成通知时,您会传递一个类似这样的 JSON 对象:-

{
  "notification":{
    "title":"Test Notification",
    "body":"Notification is delivered!",
    "sound":"call",
    "icon": "ic_app_icon"
  },
  "data":{
    "someData":"Great"
  },
  "to": "app_token",
  "priority":"high"
}

如果你想从服务器发送静默通知,上面的是一个非静默通知,那么结构应该是这样的:-

{
  "data":{
    "someData":"Great"
  },
  "to": "app_token",
  "priority":"high"
}

如您所见,它是相同的结构,只是有效负载中没有通知对象。

关于android - 我无法再在后台应用程序中收到任何 FCM 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38524806/

相关文章:

javascript - 将函数代码映射为 CouchDB 上的过滤器复制器

java - 如何知道用户何时完成输入?

android - 使用 Cordova 构建 Android 应用程序时出错

android - GCM 推送通知大图标大小

java - 使用 Java gcm-server 向主题发送消息

javascript - 如何使用 Firebase Cloud Messaging 向多个设备发送推送通知

android - 应用程序未运行时是否可以更新房间数据库中的数据?

android - 如何在 onDraw 方法中创建和显示 ListView ?

Android GCM 消息重复

json - 收到无效的 JSON 有效负载。未知名称 click_action