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



我正在尝试在 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"]
}'

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

{
"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的帮助。

相关内容

  • 没有找到相关文章

最新更新