Android - 如何为 GCM 实施规范 ID 以防止重复

Posted

技术标签:

【中文标题】Android - 如何为 GCM 实施规范 ID 以防止重复【英文标题】:Android - How to implement Canonical IDs for GCM to prevent duplicates 【发布时间】:2013-04-23 11:06:20 【问题描述】:

我已经在我的应用程序中实现了 GCM,并且我的设备在重新安装应用程序后收到两个警报。我已经阅读了有关规范 id 的信息,但很难找到有关如何使用它或如何/在何处实现它的信息。谷歌的文档有时非常模糊,没有提供示例。这就是我进行正常注册以获取 regID 的方式。

GCMRegistrar.register(this, getString(R.string.gcm_project_id));

我是否更改此代码以发送规范注册,如果是,如何更改?我的服务器没有告诉我有任何规范 id,它总是说成功 3(对于其他设备应该是 2)和规范 0。所以我无法更新数据库,因为它不会让我知道有骗人的。

【问题讨论】:

【参考方案1】:

您正在混合内容,此调用接受从 google api 控制台获取的发件人 ID。注册 ID 通过 GCMBaseIntentService 中的 onRegistered 方法发送给您,您应该将其发送到服务器,以便您可以在推送通知发送中使用它。现在,如果您有一个旧的注册 ID,那么谷歌将在发送服务的响应中向您的服务器发送更新的注册 ID AKA 规范 ID。

【讨论】:

我想我现在明白了,但这有点令人困惑。我没有收到通知说我有重复,因为我的服务器以某种方式注册了该 ID 两次,所以从技术上讲,它只是被使用两次来发送消息的相同 ID。这就是为什么规范 ID 在响应中说 0 的原因。我想有时事情对我来说不是很清楚,即使我读了几个 SO 问题。感谢您的回复。 @Mahdi Hijazi 不适用于我的情况,我已向旧应用程序 'reg_id' 和重新安装的应用程序 'reg_id' 发送消息,但旧应用程序 GCM 显示 error: 'NotRegistered' 和 ' canonical_ids:0,我仍然没有得到 canonical_ids 你能告诉我为什么它不适合我吗??【参考方案2】:

我们需要用我们存储的服务器中的规范 id 更新现有的注册 id。你可以使用这个答案Update Canonical Id

【讨论】:

以上是关于Android - 如何为 GCM 实施规范 ID 以防止重复的主要内容,如果未能解决你的问题,请参考以下文章

GCM:如何为 android 和 ios 应用程序使用相同的发件人 ID?

如何为Android GCM(Pushnotification)集成Push sharp?

GCM 的注册 ID 重复

Android GCM:如何在我自己的服务器中检测注册的规范 ID?

使用 Amazon SNS 处理 GCM 规范 ID

无需登录即可安装应用程序时的 GCM 和规范 ID