服务器和客户端获得不同的GCM注册id为相同的设备和应用程序



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

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

  1. X启动,检索它的令牌,"A",从谷歌服务器,然后告诉pushDelivery存储它的令牌
  2. pushDelivery存储令牌A
  3. pushDelivery向X发送消息,并从Google服务器接收更新的GCM令牌(规范注册ID)"B"。pushDelivery用B替换A
  4. X启动,从Google服务器检索它的令牌
问题是这样的:在步骤3中,X从Google服务器接收令牌A还是B ?我担心的是,如果X接收到令牌A,那么pushDelivery最终会用A覆盖B。下一次pushDelivery向X发送推送时,它会用B覆盖A

首先,"X"应用程序不应该在每次进入前景时都注册到GCM。它应该只在第一次启动时注册一次,或者在安装更新后第一次启动时注册一次。

至于你的"步骤3",如果GCM服务器返回一个规范的注册ID,这只意味着你的应用程序未能给你的服务器从谷歌得到的最新注册ID,或者你的服务器未能坚持最新的注册ID或删除同一设备的以前的注册ID。GCM本身不会更改规范注册ID。它只能由于客户端应用程序调用的GCM注册而更改(即使在这种情况下,注册ID通常保持不变,除非您取消注册并再次注册)。

因此,为了回答你的问题,在你的服务器从谷歌获得一个规范的注册ID B之后,在客户端应用程序上完成的任何注册到GCM都应该产生相同的注册ID B(除非,由于某种原因创建了一个新的注册ID)。GCM将不会将旧的注册ID A返回给您的客户端应用程序。

相关内容

  • 没有找到相关文章

最新更新