当前位置: 首页 > 知识库问答 >
问题:

谷歌云消息-注册ID状态

岳杜吟
2023-03-14

我使用新的GCM API来注册。方法的留档明确指出:

为GCM注册应用程序并返回注册ID。安装应用程序后,必须调用此函数一次,然后将返回的注册ID发送到服务器。

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

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

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

  • 应用程序更新

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

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

此外,关于注销阶段,新的GCM API声明:

注销应用程序。调用unregister()将停止来自服务器的任何消息。这是一个阻塞调用,您不应该从UI线程调用它。您应该很少(如果有)需要调用此方法。它不仅在资源方面很昂贵,而且会使您的注册ID无效,您永远不应该不必要地更改注册ID。更好的方法是让服务器停止发送消息。仅当您要更改发件人ID时才使用“取消注册”。

然而,前同一条指出:

每当应用程序按照实现GCM客户端中的说明进行注册时,它都应保存注册ID以供将来使用,将其传递给第三方服务器以完成注册,并跟踪服务器是否完成注册。如果服务器未能完成注册,则应重试或从GCM注销。

这也不清楚(即如何处理注销)。

最后,基于上述内容,还不清楚规范标识如何与移动设备相关。如果Google为现有注册生成Canonical ID并将其传递回应用程序后端,那么如果它调用注册方法,它还将更改移动设备的注册ID?还有其他方法让手机了解这个新身份吗?

提前非常感谢!

共有1个答案

钮轩昂
2023-03-14

谷歌建议在安装新版本后启动应用程序时,应用程序应使注册ID无效。他们的GCM演示应用程序实现了这一建议。除此之外,无需多次调用register方法(当应用程序首次启动时)。

至于取消注册——如果你想改变你的发送者身份,或者如果在你自己的服务器上注册失败,他们建议取消注册。后者的原因是,如果您的服务器从未从您的应用程序获得注册ID,它将永远不会使用该注册ID,因此应用程序没有理由注册到GCM(除非您的应用程序稍后将重试发送服务器的注册ID)。

至于规范注册ID,我知道如何将规范注册ID返回到我的服务器的唯一方法是从GCM注销应用程序(使旧注册ID无效),然后重新注册以获得新的注册ID。在这种情况下,如果服务器使用旧注册ID,它将工作,但新的注册ID将作为规范注册ID返回。这是建议不要不必要地取消注册(以避免在同一设备上为同一应用程序生成多个注册ID)的主要原因之一。

由于新的注册ID是由于您在客户端采取的操作(即取消注册注册)而创建的,因此您的应用应该已经知道新的注册ID(是的,注册将返回与规范相同的最新注册ID注册ID),您的服务器应该得到通知,并首先避免发送带有旧注册ID的消息。在Google的响应中获取规范注册ID仅涵盖客户端未能将新注册ID传递给服务器(或服务器未能删除旧注册ID)的情况。因此,不需要通知客户端新的注册ID。

您可以在此处阅读有关处理注册ID更改的更多信息,以及有关规范注册ID的更多信息。

 类似资料:
  • 上面写着“Google Cloud Messaging(GCM)是一个免费服务”,但是为了使它能够运行,我需要在Google Cloud平台中创建一个项目,这需要花钱…那怎么免费呢?还是我错过了什么?

  • 我一直在尝试在我的Android应用程序中实现GCM。但是,在遵循教程之后http://developer.android.com/google/gcm/client.html 我正在使用额外的“unregistered”进行意向类型注册,尽管我需要一些数据。在应用程序开始时,我注册没有问题,并收到发送到我的服务器的注册id。我也使用亚马逊sns。 BroadcastRecector和Intent

  • 是否建议使用android云备份来备份GCM id?我将GCM id存储在SharedReferences中,因此我不必继续注册。 如果我备份此GCM sharedpref和用户更改设备,我是否需要将其更新为新的注册id?注册ID是否特定于设备?当用户更改设备并备份时会发生什么情况? 我试着从文档中读到: 您必须排除任何特定于设备的标识符,无论是由服务器发布的还是在设备上生成的。这包括谷歌云消息(

  • 更新:已弃用GCM,请使用FCM 如何将新的Google云消息集成到PHP后端?

  • 我正在尝试在我的android应用程序中使用GCM服务。 为此,我使用Android留档从http://developer.android.com/guide/google/gcm/gcm.html 我用发送者id等创建了客户端注册过程,并在服务器端应用程序中使用注册id和发送者id发送消息。 当我通过Eclipse在手机中安装应用程序时,推送通知工作正常,因此我的发件人id是正确的。 然后,当我

  • 我正在尝试使用appengine实现GCM。我创建并部署了默认的appengine后端GCM模板。我创建一个GCM注册id: 然后,我使用模板中的默认注册endpoint将这个regID存储在appengine上。我的广播接收器如下所示: 这是我的舱单: BroadCastReceiver和intent服务在我的项目中是独立的类。appengine后端GCM是一个单独的模块。创建此模块期间: 编译