3

我使用以下方法获得了注册 ID:

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

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

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

[error] => NotRegistered

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

谢谢你

4

2 回答 2

3

是的,这种延迟是意料之中的。

在卸载您的应用程序后第一次尝试发送消息时,GCM 服务器尝试将其发送到设备,并发现您的应用程序不再在该设备上注册 GCM。

在卸载后第二次尝试发送消息时出现NotRegistered错误,因为这次 GCM 服务器知道此注册 ID 不再注册。

您无需等待一个小时即可再次尝试发送。

注意:当用户卸载应用程序时,它不会在 GCM 上自动取消注册。只有当 GCM 服务器尝试向设备发送消息并且设备回答应用程序已卸载或它没有配置用于接收 com.google.android.c2dm.intent.RECEIVE 意图的广播接收器时,它才会取消注册。此时,您的服务器应将设备标记为未注册(服务器将收到 NotRegistered 错误)。

(从这里引用)

于 2013-06-05T15:10:03.547 回答
0

为了为此添加更多细节,Eran 的回答是正确的,但我发现在多次尝试生成 NotRegistered 响应后,我会返回一个 messageId,就好像该应用程序仍安装在设备上一样。我在 google group 上找到了这条消息,它解释了 time_to_live 字段是问题的一部分。显然,默认的 time_to_live 值为 4 周,因此您可能要等待很长时间才能收到 NotRegistered 响应。我将 time_to_live 设置为 90 秒,并在第二次尝试时收到了 NotRegistered 响应。希望这会对那里的人有所帮助,因为当我试图解决这个问题时,这让我很头疼。

有关 GCM 消息格式的详细说明,请参阅google GCM 文档站点,该格式详细说明了应如何将 time_to_live 添加到消息中。

于 2015-02-05T16:53:45.753 回答