如何重置设备的 Google Cloud 消息注册?



我在手机上为我的应用程序执行gcm时犯了一个错误,现在它没有收到任何通知。同样的应用程序在任何其他设备上都可以完美地工作(接收gcm通知)。我需要将手机从gcm注销,我该怎么办?

我应该等待7天(默认到期时间)吗?

您可以尝试以下单个设备的注销过程(卸载应用程序,然后重新安装)。(注意,这是来自Google Cloud Messaging高级文档)

如何取消注册

应用程序可以在注册后自动取消注册从设备上卸载。然而,这个过程并没有发生马上,因为Android不提供卸载回调。什么在这个场景中发生的情况如下:

  1. 最终用户卸载应用。
  2. 第三方服务器向GCM服务器发送消息。
  3. GCM服务器向设备发送消息。
  4. GCM客户端接收消息并向Package Manager查询是否有配置为接收该消息的广播接收器,返回false。
  5. GCM客户端通知GCM服务器>应用程序被卸载。
  6. GCM服务器标记要删除的注册ID。
  7. 第三方服务器向GCM发送消息。
  8. GCM向第三方服务器返回NotRegistered错误消息。
  9. 第三方删除注册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()

最新更新