我已经成功实现了一个客户端/服务器 Android GCM 应用程序。我的应用服务器拥有一个 device/registration_id 对的数据库。消息通过 Web 可访问的 PHP 页面发送到设备。我正在尝试在服务器端编写错误处理,特别是响应包含 canonical_id 的情况。开发人员文档非常清楚需要做什么以及为什么会产生这样的响应:
规范 ID
在服务器端,只要应用程序运行良好,一切都应该正常工作。但是,如果应用程序中的错误触发同一设备的多个注册,则可能很难协调状态,并且您最终可能会收到重复的消息。
GCM 提供了一种称为“规范注册 ID”的工具,可以轻松地从这些情况中恢复。规范注册 ID 定义为您的应用程序请求的最后一次注册的 ID。这是服务器在向设备发送消息时应使用的 ID。
如果稍后您尝试使用不同的注册 ID 发送消息,GCM 将照常处理请求,但它将在响应的 registration_id 字段中包含规范注册 ID。确保使用此规范 ID 替换存储在您服务器中的注册 ID,因为最终您使用的 ID 将停止工作。
因此,在我的 Android 客户端应用程序中,我有一个仅用于开发的按钮,该按钮将使用 GCMRegistrar.register() 第二次注册设备,而无需先取消注册。我原以为这会给我一个与我第一次注册时不同的registration_id,并且从网络向设备发送消息(可能使用旧id)会给我一个带有canonical_id的响应。
但是,第二次注册返回与第一次完全相同的 reg_id。
因此,通过我服务器上的 PHP 发送消息不会在响应中显示 canonical_id。我确实需要测试返回 canonical_id 的情况,表明我需要更新我的数据库,因为我的 PHP 技能不是最好的!
因此,我将不胜感激地收到任何关于我如何引起这样的回应的想法
更新:我刚刚尝试从手机上卸载该应用程序,然后重新安装它。我仍然得到相同的 reg_id。