GCM'错误:未注册'

时间:2014-11-03 16:05:02

标签: android registration google-cloud-messaging

我成功测试了我的GCM代码。

但完全相同的代码,我无法获得GCM推送并得到:

  

GCM错误:未注册。

8 个答案:

答案 0 :(得分:52)

GCM响应Not Registered表示在“如果是NotRegistered之后,您应该从服务器数据库中删除注册ID,因为该应用程序是从设备卸载的,或者它没有配置广播接收器收到com.google.android.c2dm.intent.RECEIVE意图。“来自documentation。检查从设备上卸载应用程序或在AndroidManifest中描述错误的广播接收器时出现此错误的情况。您可以使用my test GCM server测试GCM功能。希望,这对你有帮助。

答案 1 :(得分:18)

如果您正在使用设备进行测试,则需要在获取令牌并重新测试之前删除InstanceID,因为一旦您覆盖了APK,它就会取消注册InstanceId,并且您会收到NotRegistered错误。因此,在您的RegisterIntentService类中,在onHandleIntent函数中执行以下操作:

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

答案 2 :(得分:9)

当GCM认为设备无法处理该消息时,会发生Not Registered。如果应用程序被卸载或配置错误以处理消息,则会发生这种情况:

enter image description here

基于@Samik和@ O'Rilla的答案,我建议采取以下步骤:

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

答案 3 :(得分:5)

如果你真的认为你的代码是正确的并且仍然出现错误

{"error": "NotRegistered"} 

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

至少在我的情况下问题已经解决了!

答案 4 :(得分:2)

当我在清单文件中的应用程序之外使用gcm接收器时出现此错误。将接收器移动到应用程序范围内,一切正常。一个非常快乐的小兔子。

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

答案 5 :(得分:2)

我使用旧的已弃用的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为我的Android应用生成新的google-services.json文件。

另请注意,RegistrationIntentService必须位于您的软件包的根目录中,否则它将无法运行! (请参阅此示例了解适用于Android的gcm实现:https://github.com/google/gcm

希望这有助于某人,因为我在此失去了几天! &GT;&LT;

答案 6 :(得分:1)

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

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

答案 7 :(得分:0)

这意味着您只是提供错误的注册ID。 因此,首先运行您的移动应用程序,您的注册ID将作为令牌。 将此令牌作为注册ID放入您的应用服务器代码中。 对于App ID,您可以从Google开发人员控制台,项目和凭据中获取服务器ID。 对于发件人ID,请设置您可以从项目中获取的项目ID,以及开发人员控制台中的设置。