我面临一个很奇怪的问题;我使用GCM 8.4.0发布了以前版本的应用程序,它工作得很好。我更新了一些代码,没有改变任何关于GCM的东西,我意识到当应用程序在后台时不再接收消息。
由于我找不到任何解释,我迁移到FCM。我做了几次不成功的尝试,它开始起作用了!然后我可以成功地发送几个不同的消息,而不需要更改任何内容!Houra ! !
在生成我的签名APK之前,我做了最后一个测试!Arrggghhhhh……当应用程序在后台时,消息不再接收!!!!
我用我的服务器进行了测试,使用高级REST请求,在与我用于成功尝试的相同条件下,没有办法,当应用程序处于前台时,它可以工作,但当应用程序处于后台时,它就不再工作了!!
你遇到过这样的问题吗?
我明确了当我收到前台应用程序的消息并从中生成通知时,有两种不同的行为:
-
当应用程序能够在后台接收它时,当我从最近的应用程序列表中滑动应用程序时,通知仍然存在。
-
当应用程序无法在后台接收它时,就像我目前的情况一样,当我滑动应用程序时,生成的通知将被删除。
它意味着有用的东西吗?
编辑
我更新到9.2.0,但问题仍然存在。
所以我在几周前得到了它的工作,但重建了几个更新,工作室,sdk, java的项目,我不能得到相同的项目现在工作了。
我花了几个小时探索网络,特别是关于这个问题的Stackoverflow,我能做的答案是"这取决于...."。我个人让它工作,它不再工作了,对你们中的一些人来说它工作,对其他人来说它不工作…
所以我从FireBase快速入门-android项目开始,我能说的是:
不,当应用程序在后台时不接收数据消息。或者我可以说:当应用程序在后台时,不再接收数据消息。
所以我向firebase支持人员询问这个问题,希望得到一个好的答案。我真的很失望,答案是:
我不知道你是怎么想的,但对我来说,这真是一场灾难!你好……团队,
谢谢你联系我们。
实际上数据负载不应该在后台接收。数据消息意图被传递给应用程序,并在onmessagerreceived()方法中接收(该方法不会在后台触发)。只有在应用程序处于后台时才会发送显示消息/通知。
…
真诚,K…
我不知道这是否是暂时的情况,也许有人可以提供更准确的信息,因为我无法相信后台消息接收不再支持了。或者至少对我们来说,因为根据我的日志,设备接收到显示以下消息的后台消息:
07-18 15:28:34.371 3068-3068/? 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()
回调!
重要编辑
构建这类项目,例如FireBase quickstart-android项目从命令行工具完美工作,但不是当你从IDE调试按钮构建它。如果你想从IDE调试按钮构建你的项目,使用Android Studio 1.5(奇怪但工作完美)。
完整的测试用例在这里可用
对不起,我没有注意到delay_while_idle
被错误地设置为true
编辑
这种行为是奇怪的,因为即使有delay_while_idle= true
,我以前发布的应用程序使用GCM 8.4.0和Studio 1.5.2构建,在后台接收消息。使用Studio 2.1.2重新构建的相同项目。(除了要求更新到gradle 2.1.2之外,项目中没有任何变化)在后台不接收消息,这是预期的行为。
但是当它进入前景时也没有接收到它!
更新到FCM 9.2.0的工作原理类似,即它不会在后台接收消息,好吧,但它不会在前台接收消息,这似乎是不正确的。
** EDIT 2 **
我肯定不能让它工作了