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议以下步骤:
- 从Android设备上卸载当前的安装
- 确保在
AndroidManifest.xml
<application>
节点中定义了<receiver>
和<sender>
。 - 确保你的
<receiver>
有正确的<category android:name="COM.COMPANY.YOURAPP" />
<receiver>
- 确保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可能会从项目,开发人员控制台中的设置。