Firebase云消息传递:删除多个设备中的一个设备时,通知密钥无效

Firebase云消息传递:删除多个设备中的一个设备时,通知密钥无效,firebase,google-cloud-messaging,firebase-cloud-messaging,Firebase,Google Cloud Messaging,Firebase Cloud Messaging,我在玩从FCM设备组中添加和删除设备令牌的游戏,我注意到,如果我从组中删除一个设备,即使该组中存在另一个设备,FCM也会取消通知键(通过尝试重用相同的键来添加新设备检测)。这对我来说非常糟糕,因为这意味着我无法将新设备添加到从中删除设备但其他设备仍在的同一组中 以下是一些代码以确认这一点(请填写适当的值): 1.使用一个设备创建设备组。 这将返回通知密钥,我必须将其提供给下一个调用,在该调用中添加新设备 { "notification_key": "my-new-notification-k

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

以下是一些代码以确认这一点(请填写适当的值):

1.使用一个设备创建设备组。 这将返回通知密钥,我必须将其提供给下一个调用,在该调用中添加新设备

{
  "notification_key": "my-new-notification-key"
}
2.将新设备添加到现有组。 响应与(1)相同

3.从组中删除最后一个设备。 成功。响应与(1)和(2)相同

4.尝试将新设备添加到同一组。
失败。响应为
400
,带有
{“错误”:“未找到通知键”}
。我不能不认为这是一个错误?否则,我们将如何动态调整一组设备的大小

事实证明,我使用的
注册ID
来自同一个chrome应用程序,即使我更改了chrome应用程序的代码,认为这会使它看起来像一个新的

只有在创建了三个chrome扩展并为每个扩展生成了
注册id
之后,FCM才开始将它们视为单独的应用程序。在这之后,一切都很顺利


谢谢@MaX的帮助。

我试过你的卷发,一切都正常。请在每次操作后使用此选项
curl-X POST-H“Authorization:key=your_key”-H“Content Type:application/json”-d'{“notification”:{“title”:“葡萄牙vs.丹麦”,“body”:“5对1”,“icon”:“firebase logo.png”,“click_action”:http://localhost:8081“}”,收件人:“通知密钥”}”https://fcm.googleapis.com/fcm/send"
以确保令牌已正确添加/删除。我使用的cURL命令减去了
-H'cache control:no cache'
部分。附言:现在我可以评论了^^很好,你可以评论了。:)你为什么认为
https://fcm.googleapis.com/fcm/send
是否需要?这对我来说不是一个很好的选择,因为系统是实时的,并且可能会处理许多设备,所以这是一个额外的网络旅行,我不想这样做。缓存控制应该对这没有影响,如果它有影响,那么我相信这是一个全新的问题。我也认为缓存控制不应该影响任何事情,但为了完整起见,我写道我没有使用它。我不知道你的系统的细节,但我建议的通知只是一种调试方法,如果你现在能负担得起使用它,它可以帮助你了解发生了什么,因为正如我所说的,它对我来说工作得很好。如果可以的话,做一个新的测试,并在每一步发送通知确认发生了什么。用新的结果编辑你的问题,因为它可能也会帮助其他人回答你,谢谢。听起来不错,将用你的建议测试它并报告。谢谢MaX,很高兴你解决了!尽管我仍然对添加两个令牌(如果是1或2)后通知组的成功次数感到好奇。尽管如此,干得不错,当它只有一个设备时,我得到了1,当它有两个设备时,得到了2,然后在我移除一个设备后,又得到了一个。一切都很好D@n_x_l你所说的“仅在创建三个chrome扩展之后”是什么意思?你是如何创建它们的?Hi@GuseynismayLov,只需按照chrome教程创建扩展。从那以后,我离开了这里,很抱歉我不能对你有更多的帮助。
{
  "notification_key": "my-new-notification-key"
}
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"]
}'
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"]
}'
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"]
}'