概念性问题,如果你不介意的话。
我们一直面临着将GCM通知持续发送到我们的Android应用程序的挑战,并且几乎在代码的所有方面都没有发现任何错误。然而,许多信息只是简单地结束了他们的生活状态="接受了。"
我可以确认正确的gcm_tokens已打包并通过POST发送到https://gcm-http.googleapis.com/gcm/send,并且收到了大部分(但不是全部)。我可以确认GCM帖子正在接收这些消息的所有gcm_tokens,因为我们正在记录生成的message_ids。但是message_id并不总是转换为呈现的通知。 FWIW:我们没有覆盖delay_while_idle的默认设置,time_to_live设置为1天。
我真的很茫然。我剩下的两个假设:GCM实际上小于< 100%可靠,或者我们遇到了一些客户端处于网络外的边缘情况,并且一旦再次激活就不会收到消息。鉴于此背景,我们应该检查的其他任何事情?抱歉这个含糊其辞的问题......我们不知道我们不知道的事情。
答案 0 :(得分:3)
我们遇到了同样的问题。
我们的假设是,从那时起它们就被关闭并保持关闭状态。例如,当有人更换手机时,旧设备将关闭或电池耗尽。我们仍然坚持使用此设备上的令牌,我们的应用程序仍然安装在它上面。我猜GCM也是如此 - 它无法联系设备,设备可以随时重新启动,因此令牌不会被视为无效。
通过观察我们拥有越来越多这样的代币(过去几个月),这一假设得到了加强。这与以下事实是一致的:越来越多人们拥有我们的应用程序的旧设备被替换和关闭。这也与Google Play信息中心中的GCM消息图表一致 - 存储的通知数量会随着时间的推移而增加。
几个月后我也开启了我的旧手机,并收到了很多之前接受过的通知。这些是由GCM存储4周的通知(我们不使用time_to_live
标志),并且在我的手机离线时无法发送。
关于此主题的文档很少,但最好的可能是https://developers.google.com/cloud-messaging/concept-options#lifetime。