我使用以下网址获得了注册ID:
String regid = (GoogleCloudMessaging.getInstance(this)).register("My_Sender_ID");
并将其存储在我的服务器上的数据库中。稍后当卸载Application时,我尝试发送一条消息,我预计会出现 NotRegistered 错误消息,看看我会从数据库中删除相应的Id。
但问题是它仍然像其他任何成功案例一样给我一个 message_id 。我想再测试一段时间并等待一个小时,现在我得到了正确的信息。
[error] => NotRegistered
那么,这种延迟是预期的吗?
谢谢
答案 0 :(得分:3)
是的,这种延迟是预料之中的。
在第一次尝试在卸载应用程序后发送消息时,GCM服务器尝试将其发送到设备,并发现您的应用程序不再在该设备上注册GCM。
在卸载后第二次尝试发送消息时出现NotRegistered
错误,因为这次GCM服务器知道此注册ID不再注册。
您无需等待一小时再尝试发送。
注意:当用户卸载应用程序时,它不会自动卸载 在GCM上未注册。它仅在GCM服务器尝试时未注册 向设备发送消息,设备回答该消息 应用程序已卸载或它没有广播接收器 配置为接收com.google.android.c2dm.intent.RECEIVE意图。 此时,您的服务器应将设备标记为未注册( 服务器将收到NotRegistered错误。)
(引自here)
答案 1 :(得分:0)
为了向此添加更多细节,Eran的回答是正确的,但我发现在做出多次尝试生成NotRegistered响应后,我会收到一条messageId,好像应用程序仍然安装在设备上一样。我在google网上找到了this message,这解释了time_to_live字段是问题的一部分。显然默认的time_to_live值是4周,因此您可能需要等待很长时间才能获得NotRegistered响应。我将time_to_live设置为90秒,并在第二次尝试时收到NotRegistered响应。希望这会帮助那些人,因为当我试图解决这个问题时,这让我非常头疼。
有关GCM消息格式的进一步说明,请参阅the google GCM documentation site,其中详细说明了如何将time_to_live添加到消息中。