从未调用 gcm.unregister() 时出现意外的 gcm 未注册消息

Posted

技术标签:

【中文标题】从未调用 gcm.unregister() 时出现意外的 gcm 未注册消息【英文标题】:Unexpected gcm unregistered message when gcm.unregister() has never been called 【发布时间】:2014-04-01 22:55:59 【问题描述】:

这只发生在我的 Kyocera Rise 上。我有一个依赖 GCM 在手机之间进行通信的应用程序。我的 Nexus 4 和 HTC One X 之间的通信工作正常,每当我发送推送通知时,两部手机都会通过 com.google.android.c2dm.intent.RECEIVE 操作接收意图。但是,在 Kyocera Rise 上运行完全相同的代码会产生完全不同的结果:每当我向它发送推送通知时,接收到的 Intent 都会包含带有“未注册”额外参数的操作 com.google.android.c2dm.intent.REGISTRATION。即使我在它成功注册 Google 后几秒钟内向它发送推送通知(我必须成功检索用于推送的设备 ID),结果是一条未注册的消息。为什么?

编辑:这是对正在发生的事情的更清晰的描述。 我所有其他手机:我注册手机 -> 我发送推送通知 -> 手机接收 com.google.android.c2dm.intent.RECEIVE 意图和消息附加内容

Kyrocera Rise:我注册电话 -> 我等待任意时间(无论是 0 秒还是 5 分钟,都不会收到一条推送通知)-> 我发送推送通知 ->手机立即收到带有“未注册”额外参数的 com.google.android.c2dm.intent.REGISTRATION 意图

编辑 2:清单的相关部分:

<receiver
    android:name="edu.neu.madcourse.wanfunglee.comm.GCMBroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="edu.neu.madcourse.wanfunglee.comm" />
    </intent-filter>
</receiver>

<meta-data
    android:name="com.google.android.gms.version"
    android:value="4242000" />
</application>

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="edu.neu.madcourse.wanfunglee.comm.permission.C2D_MESSAGE" />

【问题讨论】:

Kyrocera 设备上的 Android 版本是什么?你能发布你的android清单吗? 现在是 4.0.4。用清单编辑。 您是否在清单中的任何位置定义了edu.neu.madcourse.wanfunglee.comm.permission.C2D_MESSAGE 权限? edu.neu.madcourse.wanfunglee.comm 是您应用的主包吗? 非常感谢,包名是问题所在。我认为它应该是广播接收器本身的包。如果您将其添加为答案,我将很乐意接受。奇怪的是,在运行 4.2.2 和 4.4.2 的手机发生这些变化之前它是如何工作的。 不客气。是的,我注意到只有较旧的 Android 版本需要清单中的这些定义。 【参考方案1】:

确保在清单中的 C2D_MESSAGE 权限和 GCM 广播接收器的类别中使用您应用的主包。

【讨论】:

以上是关于从未调用 gcm.unregister() 时出现意外的 gcm 未注册消息的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 线程时出现协程错误,RuntimeWarning: coroutine 'time_messege' 从未等待

使用 QT+VTK+ITK 构建项目时出现 FDFImageIO 错误

Xcode 构建时出现格式错误

仅在运行测试时出现 DexIndexOverflowException

启动 WCG 服务时出现 System.Configuration.ConfigurationErrorsException

Xamarin 在启动应用程序时出现芯片错误