【问题标题】:GCM Invalid sender errorGCM 无效发件人错误
【发布时间】:2013-03-26 08:58:50
【问题描述】:

我被一个神秘的问题困扰了一段时间。 所以我在我的 android 应用程序中实现了 GCM,但我收到了一个 INVALID_SENDER 错误。

  • 我的 SENDER_ID 是来自 google 项目 url 的 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);
}

广播接收者:

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

【问题讨论】:

  • 查找日志03-26 11:23:38.704: V/GCMRegistrar(1389): Registering app your.packagename.com of senders XXXXXXXXXXXX 是发送给谷歌的实际发件人!
  • 你帮助我朝着正确的方向前进。现在已修复。忘记关掉旧的C2DM版本-_-..

标签: android google-cloud-messaging


【解决方案1】:

终于解决了这个问题。不小心尝试使用“项目 ID”而不是“项目编号”。 Google Developer Console 在概览页面上提供了这两种方法,请确保您使用的是正确的。

【讨论】:

    【解决方案2】:

    忘记关闭 C2DM 服务。傻我..

    【讨论】:

    • 您能澄清一下忘记关闭 C2DM 服务是什么意思吗?您需要做什么才能将其关闭?
    • 检查 google 的 api 控制台并确保 gcm 已启用但 c2dm 未启用? (这是一个猜测,不是OP,但有同样的问题)
    【解决方案3】:

    也许您的 senderID 不正确。您应该为GCMIntentService 类创建构造函数并调用super(&lt;SenderId&gt;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      相关资源
      最近更新 更多