I am trying, to implement the new GCM, I am following Google get stated : http://developer.android.com/guide/google/gcm/gs.html
I getting stuck at getting my device registration ID !
My app keep trying to connect with Google server, Here my error logs :
onReceive: com.google.android.gcm.intent.RETRY GCM IntentService class: com.dombox.app.GCMIntentService Acquiring wakelock [GCMIntentService] start Registering app com.dombox.app of senders _my_sender_id_ Releasing wakelock onReceive: com.google.android.c2dm.intent.REGISTRATION GCM IntentService class: com.dombox.app.GCMIntentService Acquiring wakelock [GCMIntentService] start handleRegistration: registrationId = null, error = SERVICE_NOT_AVAILABLE, unregistered = null Registration error: SERVICE_NOT_AVAILABLE Scheduling registration retry, backoff = 912617 (768000) Releasing wakelock
Here is my Activity Code, asking for an ID :
try{ Log.i(TAG, "[checkNotifRegistration] checkDevice"); GCMRegistrar.checkDevice(this); Log.i(TAG, "[checkNotifRegistration] checkManifest"); GCMRegistrar.checkManifest(this); if (GCMRegistrar.isRegistered(this)) { Log.i(TAG, "[checkNotifRegistration] reg id : "+GCMRegistrar.getRegistrationId(this)); } final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals("")) { // SENDER_ID is my project id into google account url GCMRegistrar.register(this, SENDER_ID); Log.i(TAG, "[checkNotifRegistration] reg id : "+GCMRegistrar.getRegistrationId(this)); } else { Log.i(TAG, "[checkNotifRegistration] already registered as : " + regId); } } catch(Exception e){ Log.e(TAG, "[checkNotifRegistration] Exception : "+e.getMessage()); e.printStackTrace(); }
Here my Service code
public class GCMIntentService extends GCMBaseIntentService { private static final String TAG = "GCMIntentService"; public GCMIntentService() { super(SENDER_ID); // SENDER_ID is my project id into google account url // TODO Auto-generated constructor stub Log.d(TAG, "[GCMIntentService] start"); } public GCMIntentService(String senderId) { super(senderId); // TODO Auto-generated constructor stub Log.d(TAG, "[GCMIntentService] start - sender Id : "+senderId); } }
And here is my Android Manifest :
<permission android:name="com.dombox.app.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.dombox.app.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <application android:icon="@drawable/icon" android:label="@string/app_name" > <receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.myapp.app" /> </intent-filter> </receiver> <service android:name=".GCMIntentService" android:enabled="true"/> <activity android:name=".activity.Myapp" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
I'm following Google's instruction, but I stuck with this SERVICE_NOT_AVAILABLE error,
What am I doing wrong ?
The problem was not code related, but link to the test phone. The test phone do not have a SIM, and the clock was not set. So google cannot resgistred it with a wrong time.
I manage to have a registration Id using a Android Virtual Device, with google api, and by setting the test phone clock.
android:enabled="true"
Remove this ^
If you don't already add this to your manifest
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8"
You don't need the second constructor in GCMIntentService. only this one
public GCMIntentService() { super(SENDER_ID); }
Ensure that your SENDER_ID is the number copied out of the URL from your browser while you are browsing the google code website AND browsing the GCM service.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With