以编程方式将Google Analytics(分析)添加到Firebase项目

时间:2020-03-23 11:54:50

标签: firebase google-analytics google-api firebase-analytics google-iam

我希望在没有任何用户交互的情况下自动化设置新Firebase项目所涉及的所有步骤。我已经通过gCloud CLIFirebase CLIGoogleApis NodeJS库完成了大多数步骤。

已通过CLI工具或服务帐户进行了身份验证。

到目前为止,我唯一无法做的就是将Google Analytics(分析)添加到新创建的Firebase项目中。我发现应该Google Api才能完成此任务,但是我在验证请求时遇到问题。

我如何在没有任何用户交互的情况下验证对此API的请求?该API无法通过CLI工具使用,因此我最好的猜测是使用具有所有者 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-“调用者没有权限”。 我也尝试使用GoogleApis NodeJS库进行此操作,结果相似。

如果作为项目所有者没有足够的特权,我如何允许该服务帐户执行此API调用?我怀疑我失败了,因为该服务帐户与Google Analytics(分析)帐户没有任何关联,但是文档并未将此列为要求。谷歌自己的guide中也未将其列为步骤。

1 个答案:

答案 0 :(得分:0)

原来,以上代码是100%有效的。问题确实在于该服务帐户具有足够的特权来编辑Firebase项目,但没有权限为Google Analytics(分析)帐户创建新属性。

为服务帐户授予Google Analytics(分析)帐户的编辑权限后,Firebase和Google Analytics(分析)之间的连接已成功建立。可以通过this API自动执行此过程。