Home » Android » google cloud messaging – Android – not getting GCM token

google cloud messaging – Android – not getting GCM token

Posted by: admin June 15, 2020 Leave a comment


I call RegistrationIntentService:

    if (checkPlayServices()) {
        Log.i("udazzT", "check servicies");
        // Start IntentService to register this application with GCM.
        Intent intent2 = new Intent(this, RegistrationIntentService.class);

But I cannot see any of the logs in RegistrationIntentService:

public class RegistrationIntentService extends IntentService {

    private static final String TAG = "RegIntentService";
    private static final String[] TOPICS = {"global"};

    public RegistrationIntentService() {

    protected void onHandleIntent(Intent intent) {
        Log.i("udazzT", "setting token");
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

        try {
            // In the (unlikely) event that multiple refresh operations occur simultaneously,
            // ensure that they are processed sequentially.
            synchronized (TAG) {
                // [START register_for_gcm]
                // Initially this call goes out to the network to retrieve the token, subsequent calls
                // are local.
                // [START get_token]
                Log.i("udazzT", "setting token 2");
                InstanceID instanceID = InstanceID.getInstance(this);
                String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
                        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
                // [END get_token]
                Log.i(TAG, "GCM Registration Token: " + token);

                // TODO: Implement this method to send any registration to your app's servers.

                // Subscribe to topic channels

                // You should store a boolean that indicates whether the generated token has been
                // sent to your server. If the boolean is false, send the token to your server,
                // otherwise your server should have already received the token.
                sharedPreferences.edit().putBoolean(QuickstartPreferences.SENT_TOKEN_TO_SERVER, true).apply();
                // [END register_for_gcm]
        } catch (Exception e) {
            Log.d(TAG, "Failed to complete token refresh", e);
            // If an exception happens while fetching the new token or updating our registration data
            // on a third-party server, this ensures that we'll attempt the update at a later time.
            sharedPreferences.edit().putBoolean(QuickstartPreferences.SENT_TOKEN_TO_SERVER, false).apply();
        // Notify UI that registration has completed, so the progress indicator can be hidden.
        Intent registrationComplete = new Intent(QuickstartPreferences.REGISTRATION_COMPLETE);

     * Persist registration to third-party servers.
     * Modify this method to associate the user's GCM registration token with any server-side account
     * maintained by your application.
     * @param token The new token.
    private void sendRegistrationToServer(String token) {
        // Add custom implementation, as needed.

     * Subscribe to any GCM topics of interest, as defined by the TOPICS constant.
     * @param token GCM token
     * @throws IOException if unable to reach the GCM PubSub service
    // [START subscribe_topics]
    private void subscribeTopics(String token) throws IOException {
        for (String topic : TOPICS) {
            GcmPubSub pubSub = GcmPubSub.getInstance(this);
            pubSub.subscribe(token, "/topics/" + topic, null);
    // [END subscribe_topics]

How to&Answers:

Make sure that it is registered in your manifest.

<service android:name=".RegistrationIntentService"
             android:exported="false" />


Did you think to add all is needed like here googlesamples


Just add this

<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="<PACKAGE-NAME>" />

in manifest.xml of “GcmReceiver” & “MyGcmListenerService” in my code it is looks like below.

        android:permission="com.google.android.c2dm.permission.SEND" >
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="<PACKAGE-NAME>" />
    <!-- [END gcm_receiver] -->

    <!-- [START gcm_listener] -->
        android:exported="false" >
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="<PACKAGE-NAME>" />
    <!-- [END gcm_listener] -->
    <!-- [START instanceId_listener] -->

In my case it is working… May be it will be helpful to you. Best Of Luck


check if you have added below line in receivers intent filter

Since its mentioned in GCM doc as:

If you want to support pre-4.4 KitKat devices, add the following action to the intent filter declaration for the receiver: