Android GCM每次发送不同的注册ID
我对Android的Android GCM每次发送不同的注册ID,android,google-cloud-messaging,Android,Google Cloud Messaging,我对Android的GCM服务有点“问题”。 关键是,每次我请求注册id时,GCM服务器返回一个不同的注册id。最糟糕的是,在做了测试之后,旧的和新的都能正常工作!!(我向老用户和新用户发送推送消息,我的应用程序正在接收来自每一个用户的推送!!) 这是AsyncTask我正在使用GCMAndroid服务器中的寄存器: public class AltaGCM extends AsyncTask<Void, Void, Void> { @Override protec
GCM
服务有点“问题”。
关键是,每次我请求注册id时,GCM
服务器返回一个不同的注册id。最糟糕的是,在做了测试之后,旧的和新的都能正常工作!!(我向老用户和新用户发送推送消息,我的应用程序正在接收来自每一个用户的推送!!)
这是AsyncTask
我正在使用GCM
Android服务器中的寄存器:
public class AltaGCM extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
int contador = 0;
try{
regId = gcm.register(CrisolGooglePlayServicesUtils.SENDER_ID);
} catch (IOException e) {
statusCode = -1;
}
return null;
}
@Override
protected void onCancelled() {
}
@Override
protected void onPreExecute() {
}
@Override
protected void onPostExecute(Void result) {
listener.respuestaGCM(statusCode, regId);
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
公共类AltaGCM扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…参数){
GoogleCloudMessaging gcm=GoogleCloudMessaging.getInstance(上下文);
int contador=0;
试一试{
regId=gcm.register(CrisolGooglePlayServicesUtils.SENDER\u ID);
}捕获(IOE异常){
statusCode=-1;
}
返回null;
}
@凌驾
受保护的void onCancelled(){
}
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的void onPostExecute(void结果){
respuestaGCM(状态码,regId);
}
@凌驾
受保护的void onProgressUpdate(void…值){
}
}
我不知道我做错了什么,但是,这已经发生在我身上两个月了(或多或少)。在我从来没有遇到过这个问题之前,GCM
服务器通常会返回相同的注册id(不是每次,但有时)
我不知道每次收到不同的注册id是正常的还是我做错了什么
非常感谢
看看@nunofmendes提供的答案
有时谷歌会更改注册ID,你会有多个
关联的ID。发送通知的服务器(您的服务器)
必须使用新ID更新数据库
有关更多信息,请查看此文档:
也就是说:
在服务器端,只要应用程序运行良好,
一切正常。但是,如果应用程序中存在错误
触发同一设备的多个注册,可能很难
协调状态,您可能会得到重复的消息
GCM提供了一种称为“规范注册ID”的工具,可以方便地
从这些情况中恢复过来。定义了规范注册ID
是您的应用程序请求的最后一次注册的ID。
这是服务器向服务器发送消息时应使用的ID
装置
如果以后您尝试使用其他注册发送消息
ID,GCM将一如既往地处理请求,但它将包括
的注册ID字段中的规范注册ID
答复。请确保替换存储在计算机中的注册ID
具有此规范ID的服务器,最终您使用的ID将
停止工作
根据该文件,这是因为“应用程序”上的“错误”。嗯,我不知道问题出在哪里,如果是因为客户端的原因(我想我做的注册是正确的……这是我的观点),还是发生在谷歌API控制台上的应用程序中?问题是我知道安卓文档是怎么说的,但我不明白是什么“在服务器端,只要应用程序运行良好,一切都应该正常工作。然而,如果应用程序中的一个bug触发了同一设备的多个注册”意味着。因为这似乎是Android应用程序上的一个问题……是否正确?在这种情况下,问题是什么?因为我使用最新的Google Play服务和最新的文档来做这件事……所以我不明白