我成功测试了我的GCM代码。
但是使用完全相同的代码,我无法收到GCM推送,而是收到以下错误:
GCM错误:未注册。
我成功测试了我的GCM代码。
但是使用完全相同的代码,我无法收到GCM推送,而是收到以下错误:
GCM错误:未注册。
GCM响应未注册
表示以下内容:“如果是未注册
,则应从您的服务器数据库中删除注册ID,因为该应用程序已从设备中卸载或未配置广播接收器以接收com.google.android.c2dm.intent.RECEIVE意图。”来自文档。检查何种情况下会出现此错误,当应用程序从设备中卸载或在AndroidManifest中描述不正确的广播接收器时。您可以使用我的测试GCM服务器测试GCM功能。希望这能帮助您。
onTokenRefresh()
调用中随后请求。我似乎无法理解为什么InstanceId API会提供无效的令牌。 - akshayt23InstanceID instanceID = InstanceID.getInstance(this);
try
{
instanceID.deleteInstanceID();
} catch(IOException e)
{
e.printStackTrace();
}
instanceID = InstanceID.getInstance(this);
如果您确信您的代码是正确的,但仍然出现错误
{"error": "NotRegistered"}
尝试从手机手动卸载应用程序,然后再次运行它(您的设备将获得新的注册ID)。至少在我的情况下,问题已经解决了!
当我将GCM接收器放在应用程序之外的清单文件中时,出现了这个错误。 将接收器移动到应用程序范围内,一切正常。 现在非常高兴。
<application>
...
<receiver>
...
</receiver>
...
</application>
我曾使用过已经过时的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
必须位于您的包的根目录下,否则它将无法正常工作!(请参阅此示例以将gcm实现到Android中:https://github.com/google/gcm)
希望这能帮助某些人,因为我在这上面浪费了好几天!!! ><
在运行Android 4.0.4或更低版本的设备上,需要使用Google账户。 http://developer.android.com/google/gcm/gcm.html
您还应该在清单文件中添加<uses-permission android:name="android.permission.GET_ACCOUNTS" />
。
{"multicast_id":63135.....,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"}]}
,而我的清单文件看起来像是这样的:{"gcm_sender_id": "10395...." }
。 - kneidels