GCM/FCM:未接收事件,广播意图回调:结果=取消



有人讨论过这个错误,但似乎最终都得到了关于(应用程序)"停止状态"的答案。

我看到了一些不同的东西。

我有两个云推送样本,一个是官方的GCM样本,另一个是遵循教程的FCM项目,它们都受到了影响。

两者都安装在6.0.1的三星S6上,该设备已插入(无Doze)并连接到WiFi。

不时地,向GCM样本或FCM应用程序发送推送消息开始失败,logcat:中有这些消息

07-17 14:37:38.851 W/GCM-DMM(29459):广播意图回调:result=CANCELED for intent{act=com.google.android.c2dm.intent.REIVE flg=0x100000000 pkg=GCM.play.android.samples.com.gcmquickstart(具有额外功能)}

07-17 14:38:25.231 W/GCM-DMM(29459):广播意图回调:result=CANCELED for intent{act=com.google.android.c2dm.inter.RECEIVE flg=0x100000000 pkg=firebasetest.example.kman.firebasetest(有额外功能)}

启动任何一个应用程序的UI都会使推送消息再次通过(到该应用程序),但旧的推送消息(产生错误)不会被重新传递。

现在-我没有强制停止任何一个应用程序。其中一个我大概15分钟前用过。该设备没有进入睡眠状态(屏幕一直亮着,并且一直插着电源)。

因此,"强制停止"的解释不适用于此,Doze模式不适用于此处。

此外,说到"强制停止",我做了几个测试,运行然后故意关闭"最近的应用程序列表"中的任何一个(GCM或FCM)应用程序,验证进程是否被终止(通过logcat),然后(GCM和FCM)推送消息都会顺利通过。

因此,它必须是其他东西(而不是"强制停止"或Doze模式),而这种其他东西正在导致推送消息变得不可靠,这违背了目的。

关于如何追踪这一点,以防止/避免推送消息传递的突然中断,有什么想法吗?

GCM样本清单:

https://github.com/googlesamples/google-services/blob/master/android/gcm/app/src/main/AndroidManifest.xml

FCM测试的清单:

```xml

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:name=".MyFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

    <service android:name=".MyFirebaseInstanceIDService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>
</application>

```

我的结论是:

这是由安卓工作室引起的。

当你完成一天的项目并退出AS时,它会询问是否应该终止(正在调试的)应用程序。

无论你在这里选择什么,AS都会终止应用程序并将其置于"停止"状态——不仅仅是GCM,警报也会停止。

我一直看到这种情况发生,并养成了自己重新启动应用程序并在那里做一些事情的习惯,这样它就不会说"停止",也不会让我第二天感到惊讶("发生了什么")。

我以为我已经为此提交了一个bug,但现在找不到了。如果有人感兴趣,请放心。。。

最新更新