当应用程序处于后台时,Android 未收到 FCM 数据消息
FCM data message not received in Android when the application is in background
我遇到了一个很奇怪的问题;我有一个使用 GCM 8.4.0 发布的应用程序的先前版本,它运行良好。我更新了一些代码,但没有更改 GCM 的任何内容,我意识到当应用程序在后台时不再收到消息。这在几个不同的设备上。
由于找不到任何解释,我迁移到了 FCM。我做了几次不成功的尝试,它开始起作用了!?!然后我能够在不更改任何内容的情况下成功发送几条不同的消息!呼啦!!!
在生成签名 APK 之前,我进行了最后一次测试! Arrggghhhhh....应用程序在后台时不再收到消息!!!!
我用我的服务器进行了测试,使用高级 REST 请求,在与我成功尝试相同的条件下,没办法,它在应用程序处于前台时有效,但在应用程序处于背景!!!
你遇到过这样的问题吗???
我明确指出,当我在前台收到应用程序的消息并从中生成通知时,有两种不同的行为:
当应用程序能够在后台接收它时,当我从最近的应用程序列表中滑出该应用程序时,通知仍然存在。
当应用程序无法在后台接收它时,如我当前的情况,当我将应用程序滑出时,生成的通知将被删除。
有什么用的意思吗?
编辑
我更新到9.2.0,问题依旧。
抱歉,我没注意把delay_while_idle
设置错了。
编辑
无论如何,这种行为很奇怪,因为即使使用 delay_while_idle= true
,我之前使用 GCM 8.4.0 发布并使用 Studio 1.5.2 构建的应用程序也会在后台接收消息。
使用 Studio 2.1.2 重建的同一项目。 (除了要求更新到 gradle 2.1.2 之外,项目中没有任何变化)在后台时没有收到消息,这是预期的行为。
但是它在前台进入时也没有收到它!
更新到 FCM 9.2.0 的工作方式类似,即它在后台时不接收消息,好的,但在前台时不接收消息,这似乎不正确。
** 编辑 2 **
我肯定不能让它工作了
所以我几周前就开始工作了,但是用几个更新、studio、sdk 重建项目,java,我现在不能再工作了。
我花了几个小时浏览网络,特别是关于这个问题的 Whosebug,我能做的答案是 "It depends...." 我个人让它工作了,它不再工作了,对你们中的一些人来说它工作,对于其他一些人则没有...
所以我从 FireBase quickstart-android project 开始,我能说的是:
不,应用程序在后台时不会收到数据消息。或者我会说:当应用程序处于后台时,不再接收数据消息。
所以我问这个问题 Firebase-support 希望得到一个好的答案。我真的很失望,答案是:
Hello ... team,
Thank you for reaching out to us.
Actually data payload is not supposed to be received in background. Data message intents are delivered to the application and received inside onMessageReceived() method (which does not fire in background). Only display messages/ Notifications are delivered when the app is in background.
...
Sincerely,
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 project 完美运行,但当您从 IDE 调试按钮构建它时却不行。
如果你想从 IDE 调试按钮构建你的项目,请使用 Android Studio 1.5 奇怪但工作完美)。
完整的测试用例可用 here。
我遇到了一个很奇怪的问题;我有一个使用 GCM 8.4.0 发布的应用程序的先前版本,它运行良好。我更新了一些代码,但没有更改 GCM 的任何内容,我意识到当应用程序在后台时不再收到消息。这在几个不同的设备上。
由于找不到任何解释,我迁移到了 FCM。我做了几次不成功的尝试,它开始起作用了!?!然后我能够在不更改任何内容的情况下成功发送几条不同的消息!呼啦!!!
在生成签名 APK 之前,我进行了最后一次测试! Arrggghhhhh....应用程序在后台时不再收到消息!!!!
我用我的服务器进行了测试,使用高级 REST 请求,在与我成功尝试相同的条件下,没办法,它在应用程序处于前台时有效,但在应用程序处于背景!!!
你遇到过这样的问题吗???
我明确指出,当我在前台收到应用程序的消息并从中生成通知时,有两种不同的行为:
当应用程序能够在后台接收它时,当我从最近的应用程序列表中滑出该应用程序时,通知仍然存在。
当应用程序无法在后台接收它时,如我当前的情况,当我将应用程序滑出时,生成的通知将被删除。
有什么用的意思吗?
编辑
我更新到9.2.0,问题依旧。
抱歉,我没注意把delay_while_idle
设置错了。
编辑
无论如何,这种行为很奇怪,因为即使使用 delay_while_idle= true
,我之前使用 GCM 8.4.0 发布并使用 Studio 1.5.2 构建的应用程序也会在后台接收消息。
使用 Studio 2.1.2 重建的同一项目。 (除了要求更新到 gradle 2.1.2 之外,项目中没有任何变化)在后台时没有收到消息,这是预期的行为。
但是它在前台进入时也没有收到它!
更新到 FCM 9.2.0 的工作方式类似,即它在后台时不接收消息,好的,但在前台时不接收消息,这似乎不正确。
** 编辑 2 **
我肯定不能让它工作了
所以我几周前就开始工作了,但是用几个更新、studio、sdk 重建项目,java,我现在不能再工作了。
我花了几个小时浏览网络,特别是关于这个问题的 Whosebug,我能做的答案是 "It depends...." 我个人让它工作了,它不再工作了,对你们中的一些人来说它工作,对于其他一些人则没有...
所以我从 FireBase quickstart-android project 开始,我能说的是:
不,应用程序在后台时不会收到数据消息。或者我会说:当应用程序处于后台时,不再接收数据消息。
所以我问这个问题 Firebase-support 希望得到一个好的答案。我真的很失望,答案是:
Hello ... team,
Thank you for reaching out to us.
Actually data payload is not supposed to be received in background. Data message intents are delivered to the application and received inside onMessageReceived() method (which does not fire in background). Only display messages/ Notifications are delivered when the app is in background.
...
Sincerely, 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 project 完美运行,但当您从 IDE 调试按钮构建它时却不行。
如果你想从 IDE 调试按钮构建你的项目,请使用 Android Studio 1.5 奇怪但工作完美)。
完整的测试用例可用 here。