2013-08-20 84 views
1

我正尝试创建一个使用推送通知的应用程序。我完成了第三方服务器和应用程序开发中的所有工作,并且通知已成功发送。如何正确更新应用程序中的GCM注册ID

在这个应用程序的某个部分,用户将通过特定的服务注册到GCM和第三方服务器,然后向第三方服务器上传他希望在完成。

我面临的问题是,当我卸载应用程序时,GCM服务器(当我发送消息时)不会响应NotConnected错误。所以当我重新安装应用时,GCMRegistrar会给我一个新的注册ID,这使得我的服务器为同一个用户提供了两个不同的注册ID。

虽然我可以借助规范的id来解决这个问题。尤其是谷歌表示

"canonical_ids": 1  
"results": [{ "message_id": "1:2342", "registration_id": "32" }] 

成功,但注册ID应该在服务器数据库进行更新(从23到32)

所以,如果我听谷歌的建议,与变更注册身份证到旧的(工作)身份证,这将导致应用程序的后缀和新的注册ID将橄榄球比赛发送到具有该特定新的注册ID的服务器,并且服务器将不知道在哪里存储该信息。

我知道注册ID不是用户的ID,而是注册设备的ID。

我的第一个想法是让服务器有不同的注册ID。所以当我得到一个规范的id时,我会忽略它。我不喜欢这个主意虽然...

我的第二个想法是,当我更改注册ID到旧之一,以某种方式更新到应用程序...

可有人告诉我这听起来对我的情况更好?这是我第一次使用推送通知......

回答

0

所以,如果我听谷歌的建议,以改变注册ID,以旧(工作)一个

这是什么的对面谷歌告诉你这样做。他们鼓励你从你的数据库中删除旧的ID,并只保留新的注册ID。

这里的relevant quote

规范标识

在服务器端,只要应用程序表现很好,一切都应该正常工作。但是,如果应用程序中的某个错误会触发同一设备的多个注册,则可能很难调和状态,并且最终可能会出现重复的消息。

GCM提供了一种称为“规范注册ID”的功能,可以轻松从这些情况中恢复。规范注册ID被定义为您的应用程序请求的最后一次注册的ID。这是在向设备发送消息时服务器应使用的ID。

如果稍后尝试使用不同的注册ID发送消息,GCM将像往常一样处理请求,但它将在响应的registration_id字段中包含规范注册ID。请确保替换存储在您的服务器上的注册ID与此规范ID,因为最终您使用的ID将停止工作。