GCM'错误:未注册'

我成功地testing了我的GCM代码。

但是完全一样的代码,我无法得到GCM推送,得到:

GCM错误:未注册。

@LKM GCM响应“未注册”表示“如果是未注册,则应从服务器数据库中删除注册ID,因为应用程序是从设备上卸载的,或者它没有configuration接收com.google.android .c2dm.intent.RECEIVE意图“。 从文档 。 检查您遇到此错误的情况,从应用程序卸载设备或在AndroidManifest中描述错误的广播接收器。 您可以使用我的testingGCM服务器来testing您的GCMfunction。 希望,这可以帮助你。

如果您正在使用设备进行testing,则需要在获取令牌和重新testing之前删除InstanceID,因为一旦覆盖了APK,它将取消注册该InstanceId,并获得NotRegistered错误。 所以在你的RegisterIntentService类中,在onHandleIntent函数中执行以下操作:

InstanceID instanceID = InstanceID.getInstance(this); try { instanceID.deleteInstanceID(); } catch(IOException e) { e.printStackTrace(); } instanceID = InstanceID.getInstance(this); 

当GCM认为设备不能处理消息时, Not Registered 。 如果应用程序被卸载或configuration错误来处理消息,则会发生这种情况:

在这里输入图像说明

基于@Samik和@ O'Rilla的答案,我会build议以下步骤:

  1. 从Android设备上卸载当前的安装
  2. 确保在AndroidManifest.xml <application>节点中定义了<receiver><sender>
  3. 确保你的<receiver>有正确的<category android:name="COM.COMPANY.YOURAPP" /> <receiver>
  4. 确保Receiver的实施是正确的

如果你真的认为你的代码是正确的,仍然有错误

 {"error": "NotRegistered"} 

尝试从手机上手动卸载应用程序并再次运行(您的设备将获得新的注册ID)。

至less在我的情况下,问题解决了!

当我在清单文件中的应用程序之外有gcm接收器时,发生此错误。 将接收器移入应用程序范围,一切正常。 现在是一个非常快乐的兔子。

 <application> ... <receiver> ... </receiver> ... </application> 

Google帐户是运行Android 4.0.4或更低版本的设备上的要求。 http://developer.android.com/google/gcm/gcm.html

您还应该在清单文件中添加<uses-permission android:name="android.permission.GET_ACCOUNTS" />

我正在使用旧的不赞成代码GCM:

 if (gcm == null) { gcm = GoogleCloudMessaging.getInstance(this); } String regId = gcm.register(SENDER_ID); msg = "Device registered, registration ID=" + regId; 

当试图切换到新的方式:

 InstanceID instanceID = InstanceID.getInstance(this); String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 

我得到了同样的错误,这让我坚持了两天。

在本书中尝试了所有内容之后,解决了在开发者控制台中禁用GCM,重新启用它,然后转到https://developers.google.com/mobile/add以生成新的;google-services.json文件我的Android应用程序。

另外请注意, RegistrationIntentService必须位于包的根目录下,否则将无法工作! (请参阅此示例以了解Android的gcm实现: https : //github.com/google/gcm )

希望这可以帮助一个人,因为我失去了这个日子! > <

这意味着你只是给出了一个错误的注册ID。 所以为此,首先运行您的移动应用程序,您的注册ID将作为标记。 把这个标记作为注册ID放到你的应用服务器代码中。 对于App ID,请提供服务器ID,您可以从Google开发者控制台获取您的项目和凭据。 对于发件人ID,设置您的项目ID可能会从项目,开发人员控制台中的设置。