Android SDK在几个小时后从GCM收到NotRegistered错误 问题
我正在编写Android SDK,它应该从SDK服务器端接收GCM推送消息。推送消息发送成功数小时后,GCM服务器返回Android SDK在几个小时后从GCM收到NotRegistered错误 问题,android,sdk,google-cloud-messaging,Android,Sdk,Google Cloud Messaging,我正在编写Android SDK,它应该从SDK服务器端接收GCM推送消息。推送消息发送成功数小时后,GCM服务器返回NotRegistered错误: { "multicast_id":6205350692941230304, "success":0, "failure":1, "canonical_ids":0, "results": [ { "error":"NotRegistered"
NotRegistered
错误:
{
"multicast_id":6205350692941230304,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"NotRegistered"
}
]
}
客户端的注册ID
没有更改,服务器端将使用该令牌进行更新
如何解决注册ID
问题?有两个侦听器(一个在SDK中,一个在应用程序中)是问题吗?
建筑学
我的Android SDK在初始化时注册一个GCMregId
,并将该id发送到支持SDK的服务器
拥抱应用程序可能(通常也确实)注册自己的GCMregId
。另一个regId
可能被发送到拥抱应用程序的服务器
SDK和应用程序的senderId
不同
实施
显示
此代码从GCM服务器获取regId
,并将其发送到我们的后端服务器。它在SDK初始化时执行,每次应用程序从后台返回时都会发送regId
笔记
既不是从服务器端调用,也不是从客户端调用unregister()
- 我每隔一段时间就会用注册id敬酒一次,这样我就可以验证客户端和服务器之间的注册id是否相同:
将带有包名的类别添加到
intent过滤器中
<receiver
android:name=".xxxxx"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<!-- Receives the actual messages. -->
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.xxxx" />
</intent-filter>
</receiver>
注册ID的生成不仅包括设备,还包括应用程序和发件人ID。如果我正确理解了您的体系结构,您希望实现GCM客户端库(您的SDK),使您的应用程序能够通过库使用GCM吗?如果这是真的,确保你只注册一次 SDK和应用程序的senderId不同
我假设这就是问题所在,您必须使用发件人id(例如XYZ)注册每个应用程序,并在服务器上使用相同的发件人id发送通知。无法使用ABC作为发件人id向已注册发件人id XYZ的设备发送通知谢谢!能否请您详细说明为什么这会起作用,并添加一些文档链接?我希望这是一个权威的,规范的回答。谢谢你的回答。你能提供你索赔的支持链接吗?对不起,恐怕不行。原因是你使用的是不推荐的API版本,谷歌删除了旧的官方文档,但是我知道你必须使用相同的发送者id来发送和接收,因为我也开发了GCM应用程序(其他任何东西都没有意义,因为这是为了安全,以保证服务器有权向设备发送通知)这里有指向新InstanceID API的链接,我强烈建议您同时使用新InstanceID和新GCM API
protected String doInBackground(Void... params) {
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(mContext);
}
regid = gcm.register(SENDER_ID);
msg = "Device registered, registration ID=" + regid;
storeRegistrationId(mContext, regid);
listener.onGCMRegisterFinish(regid);
}
catch (IOException ex)
{
msg = "Error :" + ex.getMessage();
}
return msg;
}
2015-08-02 12:31:22,383 INFO - request_2145354041215926507
update push token for user: XXXXXXXX,
push_token: ...me1GttmSRipnWsCGVUueK7e0nk
<receiver
android:name=".xxxxx"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<!-- Receives the actual messages. -->
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.xxxx" />
</intent-filter>
</receiver>