Home » Android » android – GCM Invalid sender error

android – GCM Invalid sender error

Posted by: admin June 15, 2020 Leave a comment

Questions:

I’m stuck for a while on a mysterious problem.
So I implemented GCM in my android app, but i receive an INVALID_SENDER error.

  • My SENDER_ID is the id from the url of the google project.
  • The Android push notifications are ON

The weird thing about this is that i already have a registration id to send notifications to.
So my console looks like this:

03-26 09:39:20.233: I/<test>(19761): Already registered: APA91bG6-   O3OnZt50EAjYvJ5KETv3qAlPOn2SfOPXez7SLAmaAOkHTN6EMDJb91gFIWkftZkJiub6UoEk4O-  WQP7kk2oZGQjZ1VCZZS0WddQtjFaCfYfZfb7SEw3IS1sd4caJcdZE4LA1F0hxzc7Ss1UiYHXX-XXXX
03-26 09:48:23.522: I/<test>(19925): GCMIntentService 
03-26 09:39:20.670: I/<test>(19761): on Error INVALID_SENDER

Inside the onCreate:

GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
    Log.i("<test>", "registering");
        GCMRegistrar.register(this, "2194354949XX");
} else {
    Log.i("<test>", "Already registered: " + regId);
}

broadcastreceiver:

 public class GCMBroadcastReceiver extends com.google.android.gcm.GCMBroadcastReceiver{
    @Override
    protected String getGCMIntentServiceClassName(Context context){
        return "be.XXX.XXX.system.GCMIntentService";
    }
}

GCMIntentService:

 public class GCMIntentService extends GCMBaseIntentService {
    @Override
    protected void onError(Context arg0, String errorId) {
        Log.i("<test>","on Error " + errorId);
    }

    @Override
    protected void onMessage(Context arg0, Intent intent) {
        Log.i("<test>","onMessage " + intent.getExtras().toString());
    }

    @Override
    protected void onRegistered(Context arg0, String regId) {
        Log.i("<test>","Registration id: " + regId);
    }

    @Override
    protected void onUnregistered(Context arg0, String regId) {
        Log.i("<test>","onUnregistered " + regId);
    }

    public GCMIntentService() {
        super("2194354949XX");
        Log.i("<test>","GCMIntentService ");
    }
}

Manifest:

 <permission
    android:name="com.XX.XX.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.smstiming.hezemans.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />



<receiver android:name="be.XX.XX.system.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.smstiming.hezemans" />
        </intent-filter>
    </receiver>

 <service android:name="be.XX.XX.system.GCMIntentService" /> 
How to&Answers:

Finally got around this. Was accidentally trying to use the the ‘Project ID’ instead of the ‘Project Number’. Google Developer Console provides both on the Overview page, make sure you are using the correct one.

Answer:

Forgot to turn off the C2DM service. Silly me..

Answer:

Maybe your senderID is not true. You should create constructor for GCMIntentService class and call super(<SenderId>).