Android GCM每次发送不同的注册ID

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

我对Android的
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服务和最新的文档来做这件事……所以我不明白