Push notification 服务器和客户端为同一设备和应用程序获取不同的GCM注册id

Push notification 服务器和客户端为同一设备和应用程序获取不同的GCM注册id,push-notification,google-api,google-cloud-messaging,Push Notification,Google Api,Google Cloud Messaging,我正在通过GCM令牌更新追踪一个潜在的竞争条件,并想询问是否有人知道在这种情况下会发生什么 假设我有一个名为pushDelivery的服务器,它通过GCM发送推送,一个名为X.X的Android客户端在用户每次退出应用程序时告诉pushDelivery它的推送令牌是什么 X启动,从Google服务器检索它的令牌A,然后告诉pushDelivery存储它的令牌 pushDelivery存储令牌A pushDelivery向X发送消息并接收更新的GCM令牌规范注册ID​, B、 从谷歌服务器。pus

我正在通过GCM令牌更新追踪一个潜在的竞争条件,并想询问是否有人知道在这种情况下会发生什么

假设我有一个名为pushDelivery的服务器,它通过GCM发送推送,一个名为X.X的Android客户端在用户每次退出应用程序时告诉pushDelivery它的推送令牌是什么

X启动,从Google服务器检索它的令牌A,然后告诉pushDelivery存储它的令牌 pushDelivery存储令牌A pushDelivery向X发送消息并接收更新的GCM令牌规范注册ID​, B、 从谷歌服务器。pushDelivery将A替换为B X启动,从Google服务器检索其令牌 问题是:在步骤3中,X是否从Google服务器接收令牌A或B?
我担心的是,如果X接收到令牌A,则pushDelivery最终将用A覆盖B。下次pushDelivery向X发送推送时,它将用B覆盖A。首先,X应用程序不应在每次进入前台时向GCM注册。它应该只在首次启动时注册一次,或者在安装udpate后首次启动时注册一次

至于步骤3,如果GCM服务器返回规范注册ID,则仅表示您的应用程序未能向您的服务器提供从Google获得的最新注册ID,或者您的服务器未能保留最新注册ID或删除同一设备以前的注册ID。GCM不会自行更改规范注册ID。它只能在客户端应用程序调用GCM注册时更改,即使在这种情况下,注册ID通常保持不变,除非您取消注册并再次注册


因此,为了回答您的问题,在您的服务器从Google获得规范注册ID B后,在客户端应用程序上向GCM进行的任何注册都应产生相同的注册ID B,除非出于某种原因创建了新的注册ID。GCM不会将旧的注册ID A返回到您的客户端应用程序。

关于以前的注册ID,以下链接说明确保将存储在服务器中的注册ID替换为此规范ID,因为您使用的ID最终将停止工作。我想知道您是否知道关于上一个注册id何时存储有效的可靠文档。@EricLeon我没有看到任何此类文档,根据经验,我所有的旧注册id仍然有效。