用户通知 - 如何从 GCM 中恢复丢失的 notification_id?

Posted

技术标签:

【中文标题】用户通知 - 如何从 GCM 中恢复丢失的 notification_id?【英文标题】:User Notifications - How to recover a lost notification_id from GCM? 【发布时间】:2014-10-22 15:55:13 【问题描述】:

我按照here 的描述生成notification_keys。

假设由于某些错误我无法存储它,所以我尝试重新注册。 这次我收到一个 400 错误消息"notification_key already exists"。 这看起来很奇怪,尤其是与 registration of a device to GCM 相比,您可以随意注册多次,并且始终获得状态为 200 的相同注册 ID。 现在我不能再次注册,也不能取消注册,因为我没有notification_id。 有什么方法可以从 GCM 获取之前生成的notification_key? 或者是用不同的notification_key_name重新注册的唯一方法吗?

【问题讨论】:

【参考方案1】:

我找不到任何有关它的文档,但现在可以通过向 https://fcm.googleapis.com/fcm/notification?notification_key_name=my_notification_key_name 发出 GET 请求以及所需的标头来恢复设备组的 notification_keyAuthorization: key=my_keyContent-Type: application/jsonproject_id: my_id

你会得到类似 "notification_key": "lost_key" 的回复

但请注意,返回的 notification_key 与原始的不同,但您可以同时使用它们。

【讨论】:

这对我有用,谢谢!我不敢相信文档有多糟糕...... 此解决方案的采用者请注意,Content-Type: application/json 实际上是必需的,没有明显的原因,在这种情况下没有意义。另一方面,它有效。【参考方案2】:

根据文档,无法从 GCM 获取现有 notification_key_namenotification_key。如果您考虑一下,尝试为现有的notification_key_name 创建一个新的notification_key 将给您一个错误是有道理的,因为如果不是这种情况,您可能会不小心覆盖现有的注册 ID notification_key 如果您碰巧错误地提供了现有的 notification_key_name

您将此与将设备多次注册到 GCM 进行比较,每次都获得相同的注册 ID,但情况不同。当您将设备注册到 GCM 时,GCM 可以识别设备并知道它已经注册并返回相同的注册 ID。对于用户通知,它只有您提供的notification_key_name,并且没有什么可以阻止您为多个用户使用相同的notification_key_name。也就是说,有些事情阻止了您 - 尝试使用以前使用的 notification_key_name 创建 notification_key 时遇到的错误。

解决您的问题的一个简单方法是将notification_key_name 视为您的服务器生成的唯一标识符。如果您没有某个用户的notification_key(因为它是新用户,或者因为您未能存储之前从 Google 获得的notification_key),您将生成一个新的唯一notification_key_name 并使用它来创建一个新的notification_key。您不必关心您未能存储的旧notification_key

最后,您将notification_keynotification_key_name 都存储在包含用户ID 的表中。

【讨论】:

得到一个错误是有道理的,但是你不能检索他们已经知道的那个是没有意义的......如果他们能识别出一个重复,他们可以提供一个返回它的界面...正如您建议让我的服务器生成notification_key_name,这意味着生成的notification_key_name不会与应用程序的用户名一对一,如果我可以的话,这会使事情变得不必要地复杂检索notification_key... @xbakesx 您的 notification_key_name 仍将与应用的用户名一对一。如果您生成 notification_key_name 以从 Google 获取 notification_key,但未能持久化 notification_key,您也不会持久化 notfiication_key_name。然后,您将生成一个新的 notification_key_name(对于给定的用户名)以获得新的 notification_key,这将是与您的数据库中的用户名关联的唯一 notification_key_name。【参考方案3】:

如果您碰巧知道设备组中所有已注册的注册 ID。然后将它们全部删除,设备组也将被删除。之后,您可以使用之前使用的 notification_key_name 创建一个设备组。

【讨论】:

很确定需要notification_key 来删除注册ID? firebase.google.com/docs/cloud-messaging/…

以上是关于用户通知 - 如何从 GCM 中恢复丢失的 notification_id?的主要内容,如果未能解决你的问题,请参考以下文章

无法获得缺少的 gcm 推送通知

从 web 上的 fcm 向现有 gcm 用户发送推送通知

如何向 GCM 发布通知

Android GCM 通知后台堆栈

用户注销时如何发送通知?

从 Android gcm 服务器接收重复的推送通知 [关闭]