我在手机上为我的应用程序执行gcm时犯了一个错误,现在它没有收到任何通知。同样的应用程序在任何其他设备上都可以完美地工作(接收gcm通知)。我需要将手机从gcm注销,我该怎么办?
我应该等待7天(默认到期时间)吗?
您可以尝试以下单个设备的注销过程(卸载应用程序,然后重新安装)。(注意,这是来自Google Cloud Messaging高级文档)
如何取消注册
应用程序可以在注册后自动取消注册从设备上卸载。然而,这个过程并没有发生马上,因为Android不提供卸载回调。什么在这个场景中发生的情况如下:
- 最终用户卸载应用。
- 第三方服务器向GCM服务器发送消息。
- GCM服务器向设备发送消息。
- GCM客户端接收消息并向Package Manager查询是否有配置为接收该消息的广播接收器,返回false。
- GCM客户端通知GCM服务器>应用程序被卸载。
- GCM服务器标记要删除的注册ID。
- 第三方服务器向GCM发送消息。
- GCM向第三方服务器返回NotRegistered错误消息。
- 第三方删除注册ID。
注意:GCM客户端是设备上的Google Cloud Messaging框架。
请注意,完整的注册ID可能需要一段时间从GCM中移除。因此,有可能在步骤7期间发送的消息上面的代码获取一个有效的消息ID作为响应,即使消息不会被送到设备上。最后是注册ID将被删除,服务器将得到一个未注册的错误,没有需要第三方服务器执行的任何进一步操作(例如在开发应用程序时,这种情况经常发生和测试).
我假设你的应用程序在SharedPreferences
中存储注册ID,并且如果它在那里找不到注册ID,则会在发布时注册到GCM。如果是这种情况,您所要做的就是清除应用程序数据(或者,如果不能清除SharedPreferences
,则卸载并重新安装应用程序)。这将导致您的应用程序注册到GCM并获得一个有效的注册ID。
我应该等待7天(默认到期时间)吗?
GCM注册id没有到期时间这回事。一些旧版本的GCM客户端演示(也许弃用的GCMRegistrar
类也)会尝试每7天刷新注册ID,但这样做的原因只是定期重新发送注册ID到服务器(从服务器的注册ID DB丢失的情况下恢复)。
根据GoogleCloudMessaging类引用,如果您使用新的发送方ID注册到GCM,您必须首先调用unregister:
public String register (String…)senderIds)
注册GCM申请并返回注册ID。您必须在安装应用程序时调用此方法一次,并将返回的注册ID发送到服务器。
重复调用此方法将返回原始注册ID。
如果要修改发送者列表,必须先调用unregister()