我正在跟踪GCM令牌更新的潜在竞争状况,并想询问是否有人知道在这种情况下会发生什么。
假设我有一个名为pushDelivery的服务器,它通过GCM和一个名为X的Android客户端发送推送.X告诉pushDelivery每次用户前移应用程序时它的推送令牌是什么。
问题是:在步骤3中,X是否从Google服务器接收令牌A或B? 我担心的是,如果X收到令牌A,那么pushDelivery将最终用A覆盖B.下次pushDelivery向X发送推送时,它将用B覆盖A
答案 0 :(得分:0)
首先,每次进入前台时,“X”应用程序都不应注册到GCM。它应该只在首次启动时注册一次,或者在安装udpate后首次启动时注册。
对于您的“第3步”,如果GCM服务器返回规范的注册ID,则仅表示您的应用未能向您的服务器提供从Google获得的最新注册ID,或者您的服务器未能保留最新的注册ID或删除同一设备的先前注册ID。 GCM不会自行更改规范注册ID。它只能由于客户端应用程序调用的GCM注册而更改(即使在这种情况下注册ID通常保持不变,除非您注销并再次注册)。
因此,为了回答您的问题,在您的服务器从Google获得规范的注册ID B后,在客户端应用程序上完成的任何GCM注册都应该生成相同的注册ID B(除非由于某种原因创建了更新的注册ID )。 GCM不会将旧的注册ID A返回到您的客户端应用程序。