Программно добавить Google Analytics в проект Firebase - PullRequest
0 голосов
/ 23 марта 2020

I sh для автоматизации всех этапов настройки нового проекта Firebase без какого-либо взаимодействия с пользователем. Я выполнил большинство шагов с помощью gCloud CLI , Firebase CLI или GoogleApis NodeJS библиотеки.

Аутентификация имеет Это было сделано с помощью инструментов CLI или через служебные учетные записи.

Единственное, что я пока не смог сделать, - это добавить Google Analytics во вновь созданный проект Firebase. Я нашел это Google Api , которое должно выполнить sh, но у меня возникли проблемы с аутентификацией запроса.

Как я могу аутентифицировать запрос к этому API без какого-либо взаимодействия с пользователем? API не доступен через инструменты CLI, поэтому я бы предпочел использовать служебную учетную запись с владельцем IAM-ролью, но запрос продолжает давать сбой.

Мои действия до сих пор

  1. Обеспечение того, что 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 .

1 Ответ

0 голосов
/ 26 марта 2020

Оказывается, что приведенный выше код действителен на 100%. Проблема заключалась в том, что у учетной записи службы было достаточно прав для редактирования проекта Firebase, но у нее не было полномочий для создания нового свойства для учетной записи Google Analytics.

После предоставления прав доступа к учетной записи службы для Google Учетная запись Analytics, соединение между Firebase и Google Analytics успешно установлено. Этот процесс может быть автоматизирован с помощью этого API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...