谷歌云消息传递 - 注册ID状态

3

我正在使用新的GCM API进行注册。该方法的文档清楚地说明:

为GCM注册应用程序并返回注册ID。您必须在安装应用程序时调用此方法一次,并将返回的注册ID发送到服务器。

重复调用此方法将返回原始注册ID。

然而,在阅读本文时(http://developer.android.com/google/gcm/adv.html#reg-state),它指出有两种需要特殊处理的情况:

还有另外两种情况需要特别关注:

  • 应用程序更新
  • 备份和恢复

当应用程序更新时,它应该使其现有的注册ID无效,因为不能保证与新版本一起使用。

因此,开发人员什么时候应该使注册ID无效还不清楚。

此外,关于注销阶段,新的GCM API表示:

取消应用程序注册。调用unregister()停止来自服务器的任何消息。这是一个阻塞调用,你不应该从UI线程中调用它。你很少需要调用此方法(如果有必要的话)。它不仅在资源方面昂贵,而且使您的注册ID无效,您不应该不必要地更改它。更好的方法是让您的服务器停止发送消息。只有在想要更改您的sender ID时才使用取消注册。
然而,之前的同一篇文章指出:
每当应用程序按照实现GCM客户端中所述进行注册时,它都应该保存注册ID以供将来使用,将其传递给第三方服务器完成注册,并跟踪服务器是否完成了注册。如果服务器未能完成注册,则应再次尝试或从GCM注销。
这也不清楚(即如何处理注销)。
最后,基于上述内容,Canonical ID与手机的关系也不清楚。如果Google为现有注册生成Canonical ID并将其传递回应用程序后端,则如果调用register方法,它还会更改手机的注册ID吗?移动设备有其他方式可以了解此新ID吗?
非常感谢您的提前帮助!
1个回答

2
Google建议您的应用程序在安装新版本后启动时无效注册ID。他们的GCM演示应用程序实现了这个建议。除此之外,没有必要多次调用注册方法(当应用程序首次启动时)。
至于注销 - 他们建议如果您希望更改发送者ID或者在您自己的服务器上注册失败,则注销。后者的原因是,如果您的服务器从未从您的应用程序获取注册ID,则它永远不会使用该注册ID,因此没有理由将应用程序注册到GCM(除非您的应用程序稍后会重试将注册ID发送到您的服务器)。
关于规范注册ID,我所知道的唯一使规范注册ID返回到我的服务器的方法是取消注册GCM应用程序(使旧的注册ID失效),然后重新注册以获取新的注册ID。在这种情况下,如果服务器使用旧的注册ID,则可以正常工作,但新的注册ID将作为规范注册ID返回。这是建议不要无必要地注销(以避免为同一设备上的同一应用程序生成多个注册ID)的主要原因之一。
由于新的注册ID是由客户端执行的操作(即注销+注册)产生的,因此您的应用程序应该已经知道新的注册ID(是的,注册将返回最新的注册ID,它与规范注册ID相同),并且您的服务器应该被通知并避免首先发送带有旧的注册ID的消息。从Google的响应中获取规范注册ID仅涵盖了客户端未能将新的注册ID传递给您的服务器(或您的服务器未能删除旧的注册ID)的情况。因此,没有必要通知客户端新的注册ID。
您可以在此处阅读有关处理注册 ID 更改的更多信息here,以及有关规范注册 ID 的更多信息here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接