onRegistered() from GCMIntentService never called

android, google-cloud-messaging

Solution

I answer because pasting code is barely readable in comments:

I am missing some logs from your logcat that suggest your service is even called. I have this in my Logcat when registering:

GCMBroadcastReceiver  V  onReceive: com.google.android.c2dm.intent.REGISTRATION
GCMBroadcastReceiver  V  GCM IntentService class: com.package.android.app.GCMIntentService
GCMBaseIntentService  V  Acquiring wakelock
GCMBaseIntentService  V  Intent service name: GCMIntentService-DynamicSenderIds-1

Especially the last line is missing or you have forgotten to paste it. Could you make sure that you posted the complete LogCat? Filter for `GCM` to make sure you didn't missed something.

Update

As the OP mentioned in the comments, he used the service to do more. This somehow interfered with the GCM functionality and after separating this into two services it worked. Lessons learned: Don't use the GCMIntentService for anything else than GCM.

Problem

I am trying to register my app on GCM but I don't know why my app is never registered. `GCMRegistrar.register(this, SENDER_ID);` is called but onRegistered() from my GCMIntentService is never called. I don't know WHY. This is my Logcat ``` 01-17 11:03:00.015: D/GCMRegistrar(3509): resetting backoff for com.abc.xyz.ui.activity 01-17 11:03:03.210: V/GCMRegistrar(3509): Registering app com.abc.xyz.ui.activity of senders 964256581311 01-17 11:03:06.070: V/GCMBroadcastReceiver(3509): onReceive: com.google.android.c2dm.intent.REGISTRATION 01-17 11:03:06.070: V/GCMBroadcastReceiver(3509): GCM IntentService class: com.abc.xyz.ui.activity.GCMIntentService 01-17 11:03:06.070: V/GCMBaseIntentService(3509): Acquiring wakelock ``` and this is my complete manifest ``` <?xml version="1.0" encoding="utf-8"?> <manifest package="com.abc.xyz.ui.activity" android:versionCode="1" android:versionName="1.5.6" xmlns:android="http://schemas.android.com/apk/res/android"> <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="16"/> <uses-feature android:name="android.hardware.usb.host"/> <!-- This app has permission to register and receive data message. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <!-- GCM requires a Google account. --> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <!-- Keeps the processor from sleeping when a message is received. --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- Creates a custom permission so only this app can receive its messages. NOTE: the permission *must* be called PACKAGE.permission.C2D_MESSAGE, where PACKAGE is the application's package name. --> <uses-permission android:name="com.abc.xyz.ui.activity.permission.C2D_MESSAGE" /> <permission android:name="com.abc.xyz.ui.activity.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.Holo.Light" android:name="com.abc.xyz.MyApplication" android:allowBackup="false"> <activity android:name=".StartupActivity" android:noHistory="true" android:label="@string/title_startup_screen" android:configChanges="orientation"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".LoginActivity" android:windowSoftInputMode="stateAlwaysVisible|adjustResize" android:label="@string/title_login_screen" android:configChanges="orientation"> </activity> //my other activity defination <!-- BroadcastReceiver that will receive intents from GCM services and handle them to the custom IntentService. The com.google.android.c2dm.permission.SEND permission is necessary so only GCM services can send data messages for the app. --> <receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <!-- Receives the actual messages. --> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <!-- Receives the registration id. --> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.abc.xyz.ui.activity" /> </intent-filter> </receiver> <!-- Application-specific subclass of GCMBaseIntentService that will handle received messages. By default, it must be named .GCMIntentService, unless the application uses a custom BroadcastReceiver that redefines its name. --> <service android:name="com.abc.xyz.ui.activity.GCMIntentService" /> </application> </manifest> ``` I don't know what is wrong and why onRegistered() is never called. Any help will be appreciated.

Original source