Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the reasons GCM ID is not available in some cases in android

Hello we are working on an android application in which GCM plays very important role in such as marketing purpose, push some important information to users etc.

It's working fine in 60-70% cases but other 30-40% it does not work. So rest of users never receive any notification which is useful for only to them.

This is the reason we are loosing users everyday. Below is my code to get the registration ID of GCM.

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++;
    }
}

We are looking what are the reasons such that GCM id is not available for some users.

We know only one reason that If user device doesn't have a Google Play Services installed on user phone then it does not work.

We are looking some more reasons to solve this problem.

like image 932
N Sharma Avatar asked Apr 19 '15 09:04

N Sharma


People also ask

What is GCM registration ID?

The GCM Registration ID is a randomly-generated identifier that does not contain any personal or device information that could allow a developer to discover the personal identity of the user.

How does GCM work in Android?

GCM stands for Google Cloud Messaging. Every push notification receive on any Android device is sent by the GCM only. when sender sends an push notification then it goes to GCM. GCM receives that push and forward it to particular Android Device by its Unique device id.

How does a GCM work?

The GCM mode uses an initialization vector (IV) in its processing. This mode is used for authenticated encryption with associated data. GCM provides confidentiality and authenticity for the encrypted data and authenticity for the additional authenticated data (AAD). The AAD is not encrypted.

What is a GCM Registration ID?

2 Answers 2. A Registration ID is an identifier assigned by GCM to a single instance of a single application installed on an Android device. The device is assigned this identifier when it registers to Google Cloud Messaging. The GCM documentation doesn't specify what information is encoded in this identifier.

Why do I need a Google account to register to GCM?

In some older Android versions (pre-4.0.4), a Google account is required to register to GCM. If multiple users use the same app on the same device, they will be have the same registration ID, since GCM doesn't care about which user logs-in to the app.

How many GCM with login system without using GCM?

9 GCM with login system 35 Android Push Notification without using GCM 1 Documentation inconsistency regarding GCM registration 3 GCM: Using same account on multiple devices - what happens? 1 How to obtain GCM registration id using only C# code?

How many GCM for Android push notification?

9 GCM with login system 35 Android Push Notification without using GCM 1 Documentation inconsistency regarding GCM registration 3 GCM: Using same account on multiple devices - what happens?


2 Answers

One of the most common reasons why it is not available is that the user does not have google play services installed or is using a blocker.

You should also note that the GCM id should be refreshed if your application version has changed. You should be saving a unique device id to SharedPreferences and always check if it is the same, otherwise you should initiate the registration process again.

It is also a good idea to refresh the id from time to time.

like image 191
Bojan Kseneman Avatar answered Nov 15 '22 18:11

Bojan Kseneman


Our team members are trying to send the notification, if it fails, they wait about 60 miliseconds or seconds (i'm not sure) for this push notification to be send again, if it still does not work, they wait twice the time, and so on ...

And you have to evaluate the response from google, there is a error string under:

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

Which gives you the information if a users account has been moved to, if so you can use:

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

to get the new ID.

like image 43
Erdinc Ay Avatar answered Nov 15 '22 18:11

Erdinc Ay