GCM无效发件人错误

8

我遇到了一个神秘的问题,需要一段时间才能解决。

我在我的Android应用程序中实现了GCM,但是收到了INVALID_SENDER错误。

  • 我的SENDER_ID是来自Google项目网址的ID。
  • Android推送通知已经打开。

奇怪的是,我已经有了一个用于发送通知的注册ID。

因此,我的控制台看起来像这样:

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

在 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 ");
    }
}

清单文件:

 <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" /> 

1
寻找日志 03-26 11:23:38.704: V/GCMRegistrar(1389): Registering app your.packagename.com of senders XXXXXX,其中 XXXXXX 是实际发送到 Google 的发送者! - madlymad
你指导了我正确的方向。现在已经修复了。忘记关闭旧的C2DM版本-_-.. - Zillan
3个回答

10

最终解决了这个问题。我不小心试图使用“项目ID”而不是“项目编号”。Google开发者控制台在概述页面上都提供了这两种信息,请确保使用正确的那一个。


0

忘记关闭C2DM服务了。我真傻。。


4
请问您能否说明一下"忘记关闭C2DM服务"的含义?为了关闭它,您需要做些什么? - Adam Johns
检查谷歌的API控制台,确保GCM已启用但C2DM未启用?(这只是猜测,不是原帖,但遇到了同样的问题) - edthethird

0
也许你的senderID不正确。你应该为GCMIntentService类创建构造函数,并调用super()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接