1

我正在尝试创建一个使用推送通知的应用程序。我已经完成了 3rd-party 服务器和应用程序开发中的所有工作,并且通知已成功发送。

在应用程序的这个特定部分,用户将通过特定服务注册到 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 时,我会忽略它。虽然我不喜欢这个主意...

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

谁能告诉我哪个听起来更适合我的情况?这是我第一次使用推送通知...

4

1 回答 1

0

因此,如果我听听谷歌的建议,将注册 ID 更改为较旧的(工作)ID

这与谷歌告诉你的相反。他们鼓励您从数据库中删除旧 ID,只保留新的注册 ID。

这是相关的报价

规范 ID

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

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

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

于 2013-08-20T17:56:11.893 回答