Android Google Cloud Messaging(GCM)和不匹配的发件人ID

Mil*_*loš 7 android google-cloud-messaging

我想在我的Android应用程序中使用GCM服务.

为此,我使用了http://developer.android.com/guide/google/gcm/gcm.html上的android文档

我创建了客户端注册过程与发件人ID等和服务器端应用程序,我使用注册ID和发件人ID发送邮件.

当我通过Eclipse在我的手机中安装应用程序时,推送通知工作正常,所以发件人ID我是正确的.

然后,当我用Eclipse导出apk文件并将其安装在我的手机中时,我收到SenderId错误的错误消息

MissmatchedSenderId
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么我会得到这个.

我已经阅读了这些主题:

为什么我从GCM服务器端获得"MismatchSenderId"?

使用GCM发送消息时,我不断收到响应'MismatchSenderId'

但在我的情况下奇怪的是,在将应用程序导出为apk之前一切正常,然后我遇到了这个问题.

任何想法都是最好的.

sch*_*tom 10

我实际上遇到了同样的问题,并且正在研究超过10个小时.

我终于找到了问题!与服务器API密钥或浏览器API密钥或SenderID无关.问题是Google文档:

final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
  GCMRegistrar.register(this, SENDER_ID);
} else {
  Log.v(TAG, "Already registered");
}
Run Code Online (Sandbox Code Playgroud)

Google表示你必须调用getRegistrationId函数并且只有当id为空时才调用register!这对我来说根本不起作用......当我这样做时,我总是在发送到这个regId时找回MismatchSenderId.

我的解决方案是:随时打电话

GCMRegistrar.register(this, SENDER_ID);
Run Code Online (Sandbox Code Playgroud)

而当功能

protected void onRegistered( Context c, String regId )
Run Code Online (Sandbox Code Playgroud)

被称为在我的服务器数据库中保存regId.

如果我这样做,一切正常!