Android GCM 服务器错误:设备订阅已过期

Posted

技术标签:

【中文标题】Android GCM 服务器错误:设备订阅已过期【英文标题】:Android GCM Server error: Device Subscription Expired 【发布时间】:2013-09-24 21:04:21 【问题描述】:

通过 GCM 向 android 设备发送通知时,我收到以下响应:

设备订阅过期:PushSharp.Android.GcmPushService -> AppId

由于这个问题,我在手机上遇到了随机问题。例如,应用程序在接收器上接收到额外的回调。

有人可以提供有关此错误的更多详细信息吗?什么时候发生?它类似于设备ID注册吗?遇到这种情况需要做些什么?

谢谢!

【问题讨论】:

【参考方案1】:

如果您查看GcmPushChannel.cs 的代码,您会发现当Google 返回NotRegistered 错误或CanonicalRegistrationId 时返回DeviceSubscriptonExpiredException

由于您是说您的应用在接收器上获得了额外的呼叫,因此您的数据库中可能有同一设备的多个注册 ID,当您向所有这些注册 ID 发送消息时,您的设备会收到多条消息。这可以解释为什么您会在 Google 的回复中获得一个规范的注册 ID。

我不确定 Push Sharp 如何处理规范注册 ID。从我读到的小代码中,它可能会触发一个事件,允许您从数据库中删除旧的注册 ID。

【讨论】:

感谢您的回复!我阅读了代码,我能够理解为什么我的设备订阅失败了。基本上它是在我通过它注册推送事件后卸载应用程序时发生的。在这种情况下,我不得不停止从我的服务向特定 reg id 发送通知。这解决了问题!

以上是关于Android GCM 服务器错误:设备订阅已过期的主要内容,如果未能解决你的问题,请参考以下文章

GCM 设备 ID 是不是会过期,如果是,如何为 android 解决这个问题

对于某些 android 设备,GCM 消息在 GCM 服务器上停留在“已接受”状态

设备令牌已过期或应用程序未从通知中注册

推送示例android gcm,已注册设备但未收到推送通知

GCM Android:不幸的是,GCM 演示已停止

如何使用 GCM 在 android 设备上分别显示每个推送通知