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