我目前正在使用GCM从我的第三方服务器通知500 000个独特的Android用户。几个月来一切都很顺利。似乎有些用户正在卸载我的应用程序,而gcm服务并没有告诉我当前用户不再使用"NotRegistered" error code应用程序。
例如:
我安装了应用,并将gcm_id发送到我的第三方服务器
我卸载了应用
我尝试通过gcm从我的第三方服务器向应用发送一个事件:
{ "collapse_key" : "collapse_key_1", "data" : { "EVENT" : "{\"myKey\":\"myValue\"}" }, "time_to_live" : 30, "registration_ids" : ["APA91bFvdRWZimIXJMmIXvss1D-jRPQEg-1bTJ7w9LwOPNzMkSdI0UojnIjxkY8FMamrTUyBecZ2a44u1Fy1qKmcnSQLpxi2Nmw5hBUJdECXmh1jOXMW5dcXFF0OEdVLBvTLPro9ToxqrWsmq5GhtKP0BV1-HQOAQ"] }
并得到回复:
{
"multicast_id" : 5965047050545487565,
"success" : 1,
"failure" : 0,
"canonical_ids" : 0,
"results" : [{
"message_id" : "0:1428954436986778%d127aaafb324bdbf"
}
]
}
我应该从gcm收到失败消息(带有NotRegistered代码),因为我卸载了应用程序。
答案 0 :(得分:0)
在卸载启用GCM的应用后,您将第一次获得成功。在此回合中,客户端通知GCM服务器已卸载客户端应用程序。然后,服务器将标记此特定注册ID以进行删除。
从GCM服务器删除可能需要一段时间,但稍后的消息最终将返回 NotRegistered 。有关详细信息,请参阅this section。
答案 1 :(得分:0)
当GCM服务器在卸载应用程序后尝试将消息发送到设备时,GCM客户端会检测到该应用程序不再安装在设备上。您没有在应用程序代码中执行此操作。 Android操作系统的GCM客户端组件可以实现它。
下次尝试向卸载它的设备上的应用程序发送消息时,GCM服务器已经知道它已被卸载,并向您发送NotRegistered错误。
从设备中删除应用时,没有调用生命周期方法。如果有,您将不需要上面引用的事件序列,以便GCM服务器和第三方服务器检测到应用程序已卸载(因为您可以使用这样的方法从您的应用程序取消注册您的应用程序GCM服务器并让第三方服务器知道该设备已从该设备中卸载。)