我在后台应用程序中无法再收到任何 FCM 消息
Posted
技术标签:
【中文标题】我在后台应用程序中无法再收到任何 FCM 消息【英文标题】:I cannot receive any FCM message anymore in background application 【发布时间】:2016-07-22 11:01:24 【问题描述】:当应用程序处于后台时,我无法再在应用程序中接收任何数据消息。 请注意,直到最近它才在我的应用程序中完美运行。也许它在我的开发环境最近更新后停止工作,我不能说....
所以我尝试使用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: Window2a27cf7 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,我不能再构建任何工作应用程序了。 我在两台不同的计算机上遇到了这个问题,我在其中一台上重新安装了所有东西!
【问题讨论】:
【参考方案1】: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 Studio。出于任何未知原因,如果我使用 Android Studio 2 构建我的应用程序,我无法让它工作,但当我使用 Android Studio 1.5 code.google.com/p/android/issues/detail?id=219084 构建它时,它却完美无缺【参考方案2】:太不可思议了
我重新安装了 Android Studio 1.5 捆绑包 141.2422023、sdk 23.0.3、java jdk1.7.0_79 并重建了 Firebase quickstart-android 消息传递应用程序,结果惊人
当我将应用程序置于后台时,我不再有 Force stopping
消息:
07-24 12:00:10.409 671-3321/? I/ActivityManager: Killing 11067:com.google.firebase.quickstart.fcm/u0a297 (adj 9): remove task
07-24 12:00:10.425 671-31254/? D/GraphicsStats: Buffer count: 4
07-24 12:00:10.425 671-31254/? I/WindowState: WIN DEATH: Window996cbf7 u0 com.google.firebase.quickstart.fcm/com.google.firebase.quickstart.fcm.MainActivity
并且应用程序正在正确接收和处理数据负载消息
我还成功地在 Studio 1.5.2 下使用 sdk 24、buildtools 24.0.0 和 java 1.8.0_92 重建了应用程序
请告诉我,从 Studio 1.5 迁移到 Studio 2.1.2 时,应用程序中是否有一些重要的更改!
【讨论】:
从 1.5 到 2.1 的变化不会对您的项目产生这种影响。您是否对 quickstart-android 消息传递项目进行了任何调整?如果你做一个 git status 有什么变化吗? @ArthurThompson no Arthur,正如我在GitHub 上所说并深入解释了here :-/【参考方案3】:我也看到了这个错误,也是使用 Android Studio 2.1,发现了这个:
当您退出 Android Studio 时,它会终止应用(正在调试)并将其置于某种“停止”状态。
这与从最近删除的消息不同,如果我这样做,那么我的 GCM 消息可以正常通过。
但是这个循环——使用 AS 调试、退出 AS、应用程序被杀死——导致 GCM 消息传递失败并显示 result=CANCELLED forIntent
【讨论】:
我真的没有看到。对我来说,它实际上并不依赖于 Android Studio 状态。我可以在没有连接的情况下从设备启动应用程序,并且在接收 FCM 消息的能力方面我得到了相同的行为。【参考方案4】:我希望您将此类数据添加到您的 Web API 中。
$fields = array(
'to' => $reg_id ,
'priority' => "high",
'notification' => array( "title"=>"Food Shop", "body" => $message , "click_action"=> "OPEN_ACTIVITY_1"),
'data' => array(
"noti_title"=>"Food Shop One",
"noti_body"=> "some body"
),
);
【讨论】:
以上是关于我在后台应用程序中无法再收到任何 FCM 消息的主要内容,如果未能解决你的问题,请参考以下文章
Android 应用在收到新的 FCM 消息时崩溃(前台和后台)
如何在应用程序处于后台(ios)时使 FCM 通知正常工作?