是否有人知道如何向Firebase实例ID服务的batchImport
API进行身份验证(https://developers.google.com/instance-id/reference/server)使用Google应用程序凭据?
或者与凭据关联的服务帐户需要哪个IAM角色?
我当前使用的服务帐户具有Firebase Admin SDK Administrator Service Agent
角色,可以向batchAdd
API进行身份验证,例如:
POST /iid/v1:batchAdd HTTP/1.1
Host: iid.googleapis.com
Authorization: Bearer {MY ACCESS TOKEN OF THE SERVICE ACCOUNT}
Content-Type: application/json
access_token_auth: true
Connection: close
{"to":"/topics/MY_FCM_TOPIC","registration_tokens":["MY_FCM_INSTANCE_TOKEN"]}
它响应200 OK:
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Connection: close
{"results":[{}]}
但是,如果我更改为使用具有相同访问令牌的batchImport
API:
POST /iid/v1:batchImport HTTP/1.1
Host: iid.googleapis.com
Authorization: Bearer {MY ACCESS TOKEN OF THE SERVICE ACCOUNT}
Content-Type: application/json
access_token_auth: true
Connection: close
{"application":"MY iOS APP BUNDLE ID","sandbox":false,"apns_tokens":["MY_APNS_TOKEN"]}
它将响应401未授权:
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=UTF-8
Connection: close
{"error":"Not authenticated or unauthorized"}
batchImport
API是否不支持使用OAuth访问令牌进行身份验证?
或者我的服务帐户缺少某些权限?
您必须使用您的firebaseapi密钥。你可以在"设置->云消息"下的firebase中找到它
应该有一个API密钥visbile和一个遗留的API密钥。
标题:Authorization: key=<KEY>
要使用OAuth2访问令牌而不是FCM服务器密钥对iid.googleapis.com
进行身份验证,似乎还需要发送以下标头:
access_token_auth: true
实例ID服务器参考文档没有提到这一点。我不得不深入研究firebase管理节点的源代码,它还向IID服务发出请求。
对/iid/info
端点的OAuth2请求也需要此标头:
https://iid.googleapis.com/iid/info/token