我希望在没有任何用户交互的情况下自动化设置新Firebase项目所涉及的所有步骤。我已经通过gCloud CLI,Firebase CLI或GoogleApis NodeJS库完成了大多数步骤。
已通过CLI工具或服务帐户进行了身份验证。
到目前为止,我唯一无法做的就是将Google Analytics(分析)添加到新创建的Firebase项目中。我发现应该Google Api才能完成此任务,但是我在验证请求时遇到问题。
我如何在没有任何用户交互的情况下验证对此API的请求?该API无法通过CLI工具使用,因此我最好的猜测是使用具有所有者 IAM角色的服务帐户,但是请求始终失败。
到目前为止,我的步骤是:
import { google } from 'googleapis';
import * as fetch from 'node-fetch';
async function addGoogleAnalytics {
const token = await getJWTAcessToken();
await addAnalyticsFetch(token);
};
async function addAnalyticsFetch(accessToken) {
const url = `https://firebase.googleapis.com/v1beta1/projects/<my-project-id>:addGoogleAnalytics`;
const fetchResult = await fetch(url, {
method: 'POST',
headers: { Authorization: `Bearer ${accessToken}` },
json: true,
body: JSON.stringify({ analyticsAccountId: '<my-analytics-account-id>' }),
});
const fetchResultText = await fetchResult.text();
console.log('Fetch result: ', fetchResultText);
}
function getJWTAcessToken() {
const SCOPES = ['https://www.googleapis.com/auth/cloud-platform'];
const key = require('../../serviceAccount.json');
return new Promise((resolve, reject) => {
const jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, SCOPES, null);
jwtClient.authorize((err, tokens) => {
if (err) {
reject(err);
return;
}
resolve(tokens.access_token);
});
});
}
API调用的结果是简单的403-“调用者没有权限”。 我也尝试使用GoogleApis NodeJS库进行此操作,结果相似。
如果作为项目所有者没有足够的特权,我如何允许该服务帐户执行此API调用?我怀疑我失败了,因为该服务帐户与Google Analytics(分析)帐户没有任何关联,但是文档并未将此列为要求。谷歌自己的guide中也未将其列为步骤。
答案 0 :(得分:0)
原来,以上代码是100%有效的。问题确实在于该服务帐户具有足够的特权来编辑Firebase项目,但没有权限为Google Analytics(分析)帐户创建新属性。
为服务帐户授予Google Analytics(分析)帐户的编辑权限后,Firebase和Google Analytics(分析)之间的连接已成功建立。可以通过this API自动执行此过程。