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

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

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

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

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

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

MissmatchedSenderId

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

我读过这些话题:

Why do I get “MismatchSenderId” from GCM server side?

When sending messages using GCM,I keep getting the response ‘MismatchSenderId’

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

任何想法都是最好的.

解决方法

我实际上遇到了同样的问题,并且正在研究超过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");
}

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

我的解决方案是:
总是打电话

GCMRegistrar.register(this,SENDER_ID);

而当功能

protected void onRegistered( Context c,String regId )

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

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

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...