Firebase 云消息传递:Notification_key 在移除多台设备中的一台设备时无效

Firebase Cloud Messaging: Notification_key invalidated when removing one device among many

我正在尝试在 FCM 设备组中添加和删除设备令牌,我注意到如果我从组中删除设备,即使该组中存在另一个设备,FCM 也会取消 notification_key(通过尝试重复使用相同的密钥来添加新设备来检测)。这对我来说非常糟糕,因为这意味着 我无法将新设备添加到已删除设备但其他设备仍然存在的同一组中

这里有一些代码来确认这一点(请填写适当的值):

1。使用一台设备创建设备组。

curl -X POST \
  https://android.googleapis.com/gcm/notification \
  -H 'authorization: key=YOUR_KEY' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'project_id: YOUR_PROJECT_ID' \
  -d '{
   "operation": "create",
   "notification_key_name": "some-group-identifier",
   "registration_ids": ["device-token-1"]
}'

这个 returns 通知密钥,我必须将其提供给我们添加新设备的下一次调用。

{
  "notification_key": "my-new-notification-key"
}

2。将新设备添加到现有组。

curl -X POST \
  https://android.googleapis.com/gcm/notification \
  -H 'authorization: key=YOUR_KEY' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'project_id: YOUR_PROJECT_ID' \
  -d '{
   "operation": "add",
   "notification_key_name": "some-group-identifier",
   "notification_key": "my-new-notification-key",
   "registration_ids": ["device-token-2"]
}'

响应与 (1) 相同。

3。从组中删除最后一个设备。

curl -X POST \
  https://android.googleapis.com/gcm/notification \
  -H 'authorization: key=YOUR_KEY' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'project_id: YOUR_PROJECT_ID' \
  -d '{
   "operation": "remove",
   "notification_key_name": "some-group-identifier",
   "notification_key": "my-new-notification-key",
   "registration_ids": ["device-token-2"]
}'

成功。与 (1) 和 (2) 相同的响应。

4。尝试将新设备添加到同一组。

curl -X POST \
  https://android.googleapis.com/gcm/notification \
  -H 'authorization: key=YOUR_KEY' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'project_id: YOUR_PROJECT_ID' \
  -d '{
   "operation": "add",
   "notification_key_name": "some-group-identifier",
   "notification_key": "my-new-notification-key",
   "registration_ids": ["device-token-3"]
}'

失败。响应是 400{"error": "notification_key not found"}。我不能不认为这是一个错误?否则我们如何期望动态调整一组设备的大小?

事实证明,我使用的 registration_ids 来自同一个 chrome 应用程序,即使我更改了 chrome 应用程序的代码,我认为这会使它显示为一个新的。

只有在创建三个 chrome 扩展并为每个扩展生成 registration_id 之后,FCM 才开始将它们视为单独的应用程序。在此之后一切都完美运行。

感谢@MaX 的帮助。