通过 HTTP v1 身份验证的 Firebase 云消息传递设备组管理

Byr*_*ang 6 firebase-cloud-messaging

我正在将 FCM 实现从旧版 API 迁移到新的 HTTP v1 API。

我已经使用 firebase-adminsdk 创建了我的服务帐户

我还设法使用 HTTP v1 将推送通知发送到使用从服务帐户 json 生成的新 JWT 身份验证令牌的设备组令牌。

我的问题是从旧版 API 管理设备组时收到 401 未经授权的错误

https://firebase.google.com/docs/cloud-messaging/android/device-group

https://fcm.googleapis.com/fcm/notification
Content-Type:application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
project_id:SENDER_ID

{
   "operation": "create",
   "notification_key_name": "appUser-Chris",
   "registration_ids": ["bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
                        "cR1rjyj4_Kc:APA91bGusqbypSuMdsh7jSNrW4nzsM...",
                        ... ]
Run Code Online (Sandbox Code Playgroud)

从文档中可以看出,他们正在使用新的 JWT 令牌来授权管理设备组,而不是旧的服务器密钥。(服务器密钥也将于明年停用)。我的问题是我在这里到底错过了什么?具体如何使用新服务帐户来管理设备组?

尝试使用 firebase-admin-sdk json 生成 JWT 令牌以在设备组 API 中使用。返回 401

更新

有关 FCM 设备组的详细信息可以在此处找到:https ://firebase.google.com/docs/cloud-messaging/android/device-group#creating_a_device_group

以下是显示问题的示例请求和后续响应。

要求:

 POST /fcm/notification HTTP/1.1
 Host: fcm.googleapis.com
 Content-length: 194
 Project_id: XXXXREMOVEDXXXX
 Content-type: application/json
 Authorization: Bearer ya29.removed:removed
 {
     "operation": "create",
     "notification_key_name": "test-group",
     "registration_ids": ["devicetokenidhere1","devicetokenidhere2"]
 }
Run Code Online (Sandbox Code Playgroud)

回复:

 HTTP/1.1 401 Unauthorized
 Content-length: 147
 X-xss-protection: 1; mode=block
 Content-security-policy: frame-ancestors 'self'
 X-content-type-options: nosniff
 Transfer-encoding: chunked
 Expires: Wed, 28 Jun 2023 14:24:59 GMT
 Server: GSE
 -content-encoding: gzip
 Cache-control: private, max-age=0
 Date: Wed, 28 Jun 2023 14:24:59 GMT
 X-frame-options: SAMEORIGIN
 Alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
 Content-type: text/html; charset=UTF-8
 <HTML>
 <HEAD>
 <TITLE>Unauthorized</TITLE>
 </HEAD>
 <BODY BGCOLOR="#FFFFFF" TEXT="#000000">
 <H1>Unauthorized</H1>
 <H2>Error 401</H2>
 </BODY>
 </HTML>
Run Code Online (Sandbox Code Playgroud)

我最初的想法是,也许我们必须更改 Google Cloud 凭据中的某些内容,但是使用“https://fcm.googleapis.com/v1/projects/myproject-id”向任何一个特定令牌 ID 发布消息时都没有问题-此处/消息:发送”。401 仅在尝试使用设备组时发生。其次,我认为现在旧版本正在被删除,也许他们也需要将“https://fcm.googleapis.com/fcm/notification”URL更新为v1?

Byr*_*ang 0

看起来文档已经更新了。现在,我们可以通过在标头中添加此内容,将 http v1 身份验证与设备组管理 api 一起使用

access_token_auth: true

参考:https://firebase.google.com/docs/cloud-messaging/android/device-group