没有未安装的registration_id的NotRegistered消息

时间:2013-06-05 14:46:36

标签: android push-notification google-cloud-messaging

我使用以下网址获得了注册ID:

String regid = (GoogleCloudMessaging.getInstance(this)).register("My_Sender_ID");

并将其存储在我的服务器上的数据库中。稍后当卸载Application时,我尝试发送一条消息,我预计会出现 NotRegistered 错误消息,看看我会从数据库中删除相应的Id。

但问题是它仍然像其他任何成功案例一样给我一个 message_id 。我想再测试一段时间并等待一个小时,现在我得到了正确的信息。

[error] => NotRegistered

那么,这种延迟是预期的吗?

谢谢

2 个答案:

答案 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添加到消息中。