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

时间:2014-10-22 15:55:14

标签: android push-notification google-cloud-messaging android-notifications

我按照here所述生成notification_key

假设由于某些错误我无法存储它,所以我尝试重新注册 这次我收到400错误消息"notification_key already exists" 这看起来很奇怪,特别是与registration of a device to GCM相比,您可以根据需要注册多次,并始终获得状态为200的相同注册ID。
现在我无法重新注册,而且我也无法取消注册,因为我没有notification_id

有没有办法从GCM获得之前生成的notification_key
或者是使用其他notification_key_name再次注册的唯一方法?

3 个答案:

答案 0 :(得分:8)

我找不到任何关于它的文档,但现在可以通过向https://fcm.googleapis.com/fcm/notification?notification_key_name=my_notification_key_name notification_key请求GET请求恢复设备组Authorization: key=my_key来获取所需的标头:{ {1}},Content-Type: application/jsonproject_id: my_id

您会收到{ "notification_key": "lost_key" }

之类的回复

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

答案 1 :(得分:4)

根据文档,无法从GCM获取现有notification_key的{​​{1}}。如果您考虑一下,尝试为现有notification_key_name创建新的notification_key会给您一个错误是有意义的,因为如果不是这样,您可能会意外地覆盖注册如果您错误地提供现有notification_key_name,则现有notification_key的ID。

您正在将此与多次向GCM注册设备进行比较,每次都获得相同的注册ID,但情况并非如此。将设备注册到GCM时,GCM可以识别设备并知道它已经注册并返回相同的注册ID。使用用户通知时,它只提供您提供的notification_key_name,并且没有什么可以阻止您对多个用户使用相同的notification_key_name。也就是说,有一些阻止你的东西 - 尝试使用之前使用的notification_key_name创建notification_key时出现的错误。

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

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

答案 2 :(得分:-1)

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