2014-08-27 78 views
2

这里的情况是将GCM用于基于有效内容的推送通知。假设大约10个推送通知以不可折叠的方式发送到GCM服务器,以便它们全部排队。用户还没有得到这些通知,因为用户还没有连接到互联网。在注册ID更改后处理GCM中存储的消息

如果用户收到这些通知之前,更新应用程序连接到互联网后,该应用的注册ID将会改变。

想知道,如果在这种情况下,将存储的通知仍然可以传送到设备或者他们会被完全丢弃?

我无法找到存储的通知的处理时,注册ID的文档中的任何位置变化。任何人都可以请说一说吗?

非常感谢。

回答

1

我没有看到有关这种非常不可能的情况的文档。

它是如此不可能的理由是,一旦你连接到互联网(以UDPATE应用程序),它很可能你下载并安装更新之前,你会得到存储的消息。

现在,假设你在安装更新之前没有得到它们。当应用程序正在更新时,由于GCM中的旧bug,如果在升级过程中收到消息,该应用程序将自动取消注册。这正是GCM文档建议每次更新应用程序时重新注册GCM的原因。

在这个错误发生万一,你将失去所有存储设备在GCM服务器中的未送达的邮件,因为您的应用将成为该设备上的注册。

另一方面,如果未传送的邮件在GCM服务器中被延迟,直到更新应用程序,启动更新的应用程序并重新注册到GCM,则可能会传送存储的邮件,即使重新注册导致新的注册ID(注意注册ID不一定会改变),因为旧的注册ID即使在分配了新的注册ID之后仍然可以工作。

的这一切都这样说,你不应该依赖于总是被交付的所有GCM消息。它从未得到保证。每当用户启动您的应用时,您应该将其与您的服务器同步(加载任何相关的数据),因此任何未交付的GCM消息将变得无关紧要。

+0

谢谢埃兰的详细解释。所以关键是,通知的传递应该被认为是理所当然的。好的。那么我们将不得不设计一些东西。再次感谢。 – Manish 2014-08-28 08:03:11