在某些情况下,在Android中GCM ID不可用的原因是什么

N S*_*rma 13 android google-cloud-messaging

您好我们正在开发一个Android应用程序,其中GCM在营销目的中起着非常重要的作用,将一些重要信息推送给用户等.

它在60-70%的情况下工作正常,但其他30-40%的情况不起作用.因此,其他用户永远不会收到任何仅对他们有用的通知.

这就是我们每天都在失去用户的原因.以下是获取GCM注册ID的代码.

String msg = "";
int exceptionOccurRetry = 0;
while (exceptionOccurRetry < 5) {
    try {
        if (gcm == null) {
            gcm = GoogleCloudMessaging.getInstance(context);
        }
        int retry = 0;
        while (retry < 5 && regid.length() == 0) {
            regid = gcm.register(SENDER_ID);

            ++retry;
        }

        msg = "Device registered, registration ID=" + regid;

        if (!regid.equals("")) {
            // You should send the registration ID to your
            // server
            // over HTTP, so it
            // can use GCM/HTTP or CCS to send messages to your
            // app.
            sendRegistrationIdToBackend();
        }
        break;
    } catch (IOException ex) {
        msg = "Error :" + ex.getMessage();
        exceptionOccurRetry++;
    }
}
Run Code Online (Sandbox Code Playgroud)

我们正在寻找一些原因,因为某些用户无法使用GCM ID.

我们只知道一个原因如果用户设备没有在用户手机上安装Google Play服务,那么它就不起作用.

我们正在寻找解决这个问题的更多理由.

Erd*_* Ay 1

我们的团队成员正在尝试发送通知,如果失败,他们会等待大约 60 毫秒或几秒(我不确定)才能再次发送此推送通知,如果仍然不起作用,他们会等待两次,等等 ...

你必须评估谷歌的响应,下面有一个错误字符串:

std::string error = response["results"][0]["error"].asString();

如果用户帐户已移动到,它会向您提供信息,如果是这样,您可以使用:

Json::Value newRegistrationId = response["results"][0]["registration_id"];

获取新的ID。