用户通知 - 如何从 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_key
s。
假设由于某些错误我无法存储它,所以我尝试重新注册。
这次我收到一个 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_key
:Authorization: key=my_key
、Content-Type: application/json
和project_id: my_id
。
你会得到类似
"notification_key": "lost_key"
的回复
但请注意,返回的 notification_key 与原始的不同,但您可以同时使用它们。
【讨论】:
这对我有用,谢谢!我不敢相信文档有多糟糕...... 此解决方案的采用者请注意,Content-Type: application/json
实际上是必需的,没有明显的原因,在这种情况下没有意义。另一方面,它有效。【参考方案2】:
根据文档,无法从 GCM 获取现有 notification_key_name
的 notification_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_key
和notification_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?的主要内容,如果未能解决你的问题,请参考以下文章