以编程方式将 Google Analytics 添加到 Firebase 项目

Programmatically add Google Analytics to Firebase project

我希望在没有任何用户交互的情况下自动执行设置新 Firebase 项目所涉及的所有步骤。我已经通过 gCloud CLI, Firebase CLI or the GoogleApis NodeJS 库完成了大部分步骤。

身份验证已通过 CLI 工具或服务帐户完成。

到目前为止我唯一没能做的就是将 Google Analytics 添加到新创建的 Firebase 项目中。我发现这个 Google Api 应该可以完成这个,但是我在验证请求时遇到了问题。

如何在没有任何用户交互的情况下验证对此 API 的请求? API 无法通过 CLI 工具使用,所以我最好的猜测是使用具有 owner IAM 角色的服务帐户,但请求一直失败。

到目前为止我的步骤是:

  1. 确保 management API 已启用
  2. 向具有所有者权限的 GCloud 项目添加服务帐户
  3. 下载服务帐号
  4. 运行以下代码
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 - "The caller does not have permission"。 我也尝试使用 GoogleApis NodeJS 库进行此操作,结果相似。

如果作为项目所有者没有足够的权限,我该如何允许此服务帐户执行此 API 调用?我怀疑我失败了,因为服务帐户与 Google Analytics 帐户没有任何关联,但文档没有将其列为要求。它也没有被列为 Google 自己的 guide.

中的一个步骤

事实证明,上面的代码是 100% 有效的。问题确实是服务帐户有足够的权限来编辑 Firebase 项目,但它无权为 Google Analytics 帐户创建新的 属性。

在为 Google Analytics 帐户授予服务帐户编辑权限后,Firebase 与 Google Analytics 之间的连接已成功建立。此过程可以通过 this API.

自动执行