卸载应用时,Google GCM不会返回错误代码“NotRegistered”

时间:2015-04-13 21:20:24

标签: android google-cloud-messaging

我目前正在使用GCM从我的第三方服务器通知500 000个独特的Android用户。几个月来一切都很顺利。似乎有些用户正在卸载我的应用程序,而gcm服务并没有告诉我当前用户不再使用"NotRegistered" error code应用程序。

例如:

  1. 我安装了应用,并将gcm_id发送到我的第三方服务器

  2. 我卸载了应用

  3. 我尝试通过gcm从我的第三方服务器向应用发送一个事件:

  4. {
      "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代码),因为我卸载了应用程序。

2 个答案:

答案 0 :(得分:0)

在卸载启用GCM的应用后,您将第一次获得成功。在此回合中,客户端通知GCM服务器已卸载客户端应用程序。然后,服务器将标记此特定注册ID以进行删除。

从GCM服务器删除可能需要一段时间,但稍后的消息最终将返回 NotRegistered 。有关详细信息,请参阅this section

答案 1 :(得分:0)

当GCM服务器在卸载应用程序后尝试将消息发送到设备时,GCM客户端会检测到该应用程序不再安装在设备上。您没有在应用程序代码中执行此操作。 Android操作系统的GCM客户端组件可以实现它。

下次尝试向卸载它的设备上的应用程序发送消息时,GCM服务器已经知道它已被卸载,并向您发送NotRegistered错误。

从设备中删除应用时,没有调用生命周期方法。如果有,您将不需要上面引用的事件序列,以便GCM服务器和第三方服务器检测到应用程序已卸载(因为您可以使用这样的方法从您的应用程序取消注册您的应用程序GCM服务器并让第三方服务器知道该设备已从该设备中卸载。)