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

问题描述 投票:0回答:1

我希望在没有任何用户交互的情况下,自动执行设置新Firebase项目所涉及的所有步骤。我已经通过gCloud CLIFirebase CLIGoogleApis 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-“调用者没有权限”。我也尝试过使用GoogleApis NodeJS库,但结果相似。

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

firebase google-analytics google-api firebase-analytics google-iam
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.