Management REST API를 사용하여 Firebase 프로젝트 설정 및 관리

Firebase Management REST API를 사용하면 프로젝트의 Firebase 리소스 및 Firebase 앱을 포함해 Firebase 프로젝트를 프로그래매틱 방식으로 설정 및 관리할 수 있습니다.

이 개요에서는 현재 Firebase 서비스를 사용하지 않는 기존 Google Cloud 프로젝트에 Firebase 리소스와 앱을 추가하는 일반적인 워크플로를 설명합니다.

원하는 경우 이 페이지의 특정 섹션으로 건너뛸 수 있습니다.

이 페이지의 단계를 진행하기 전에 API를 사용 설정해야 합니다.

Firebase Management API의 액세스 관리에 대한 자세한 내용은 Cloud Identity Access Management(IAM) API 문서를 참조하세요.

시작하기 전에

시작하기 전에 다음에 대해 Management API를 사용 설정해야 합니다. Google Cloud 프로젝트 및 액세스 토큰을 생성합니다.

Google Cloud 프로젝트에 Management REST API 사용 설정

아직 사용하도록 설정하지 않은 경우 Firebase 관리 API Google Cloud 프로젝트에 사용할 수 있습니다.

  1. Google API 콘솔에서 Firebase Management API 페이지를 엽니다.
  2. 메시지가 표시되면 Google Cloud 프로젝트를 선택합니다.
  3. Firebase Management API 페이지에서 사용 설정을 클릭합니다.

API 액세스 토큰 생성

다음은 액세스 토큰을 가져오는 Node.js의 예시입니다.

먼저 Google Cloud 환경이 아닌 경우 GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 서비스 계정 키입니다

Linux 또는 macOS

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-file.json"

Windows

PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\your\service-account-file.json"

그런 다음 Firebase Admin SDK를 사용하여 서비스 계정 사용자 인증 정보에서 액세스 토큰을 가져옵니다.

const admin = require('firebase-admin');

function getAccessToken() {
  return admin.credential.applicationDefault().getAccessToken()
      .then(accessToken => {
        return accessToken.access_token;
      })
      .catch(err => {
        console.error('Unable to get access token');
        console.error(err);
      });
}

프로젝트의 리소스 이름 찾기

Firebase를 추가하는 데 사용할 수 있는 프로젝트 Google Cloud개를 찾을 수 있습니다. 제공합니다

요청

availableProjects.list를 호출합니다. 이 호출에 대한 요청 본문은 비어 있어야 합니다.

다음은 사용 가능한 Google Cloud의 목록을 요청하는 Node.js의 예시입니다. 프로젝트:

const fetch = require('node-fetch');

async function listProjects() {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/availableProjects';
  const options = {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    const projects = resp['projectInfo'];
    console.log('Project total: ' + projects.length);
    console.log('');
    for (let i in projects) {
      const project = projects[i];
      console.log('Project ' + i);
      console.log('ID: ' + project['project']);
      console.log('Display Name: ' + project['displayName']);
      console.log('');
    }
  } catch(err) {
    console.error(err);
  }
}

결과

availableProjects.list 호출의 응답 본문에는 ProjectInfo 객체 목록이 포함됩니다. 프로젝트 목록이 너무 길 경우 프로젝트의 다음 페이지를 가져오는 쿼리 매개변수로 사용할 수 있는 nextPageToken도 응답 본문에 포함됩니다.

다음은 availableProjects.list 호출에 대한 응답 본문의 예시입니다.

{
  "projectInfo": [
    {
      "project": "projects/first-cloud-project",
      "displayName": "First Cloud Project"
    },
    {
      "project": "projects/second-cloud-project",
      "displayName": "Second Cloud Project"
    }
  ]
}

이 응답 예시에는 Firebase를 사용할 수 있는 2개의 Google Cloud 프로젝트가 있습니다. 추가할 수 있습니다 project 필드는 전역적으로 프로젝트 고유의 리소스 이름입니다.

availableProjects.list의 응답에 나열된 project 값을 사용하여 프로젝트에 Firebase 서비스를 추가하거나 앱을 추가할 수 있습니다.

다음 섹션에서는 projects/first-gcp-project 리소스 이름을 사용하여 First Cloud Project에 Firebase 서비스를 추가합니다.

프로젝트에 Firebase 서비스 추가

프로젝트 Google Cloud개는 Firebase에서 제공하는 서비스를 활용할 수 있습니다. 포함 이 섹션에서는 기존 프로젝트에 Firebase 서비스를 추가하는 Google Cloud 프로젝트를 프로그래매틱 방식으로 생성합니다. Firebase Console에서도 기존 Google Cloud 프로젝트에 Firebase 서비스를 추가할 수 있습니다.

요청

projects.addFirebase를 호출합니다. 이 호출에 대한 요청 본문은 비어 있어야 합니다.

다음은 Firebase 서비스를 Google Cloud에 추가하는 Node.js의 예시입니다. 프로젝트:

const fetch = require('node-fetch');

async function addFirebase(projectId) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + ':addFirebase';
  const options = {
    method: 'POST',
    // Use a manual access token here since explicit user access token is required.
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

결과

projects.addFirebase를 호출한 결과는 Operation입니다. 프로젝트에서 다른 Firebase 관련 엔드포인트를 호출하려면 먼저 작업에 성공해야 합니다.

작업이 성공했는지 확인하려면 done 값이 true이고 responseFirebaseProject 유형인 결과가 나올 때까지 작업에서 operations.get을 호출하면 됩니다. 작업에 실패하면 errorgoogle.rpc.Status로 설정됩니다.

다음은 operations.get 호출의 응답 본문입니다.

{
  "name": "operations/...",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.FirebaseProject",
    "projectId": "first-cloud-project",
    "projectNumber": "...",
    "displayName": "First Cloud Project",
    "name": "projects/first-cloud-project",
    "resources": {
      "hostingSite": "first-cloud-project",
      "realtimeDatabaseInstance": "first-cloud-project"
    }
  }
}

donetrue이고 response 유형이 FirebaseProject이므로 이제 Google Cloud 프로젝트에 Firebase 서비스가 있습니다. 응답에는 projectNumber 및 기본 resources 등 새로 만든 FirebaseProject에 대한 기타 유용한 정보도 포함되어 있습니다. Operation은 완료 후 자동으로 삭제됩니다.

프로젝트에 Firebase 앱 추가

iOS, Android, 웹 앱 등 다양한 앱에서 FirebaseProject를 사용할 수 있습니다. 이 섹션에서는 기존 FirebaseProject에 Firebase 앱을 프로그래매틱 방식으로 추가하는 방법을 알아봅니다. Firebase 앱을 Firebase Console의 기존 Firebase 프로젝트

Firebase 프로젝트에 추가할 Firebase 앱 유형 선택

기존 Google 애널리틱스 계정을 기존 FirebaseProject에 프로그래매틱 방식으로 연결할 수 있습니다. 프로젝트 설정통합 탭에서도 기존 Firebase 프로젝트를 Google 애널리틱스에 연결할 수 있습니다.

projects.addGoogleAnalytics를 호출하려면 analyticsAccountId 또는 analyticsPropertyId와 같은 analytics_resource가 필요합니다.

  • 지정된 계정에 새 Google 애널리틱스 속성을 프로비저닝하고 새 속성을 Firebase 프로젝트에 연결하려면 기존 analyticsAccountId를 지정합니다.

  • Google 애널리틱스 속성을 Firebase 프로젝트에 연결하려면 기존 analyticsPropertyId를 지정합니다.

Google 애널리틱스 웹사이트에서 analyticsAccountId 및 기존 analyticsPropertyId를 모두 확인할 수 있습니다.

projects.addGoogleAnalytics 호출 시 참고사항

  1. 첫 번째 확인에서 데이터 스트림과 연결된 packageName 또는 bundleId를 기준으로 Google 애널리틱스 속성의 기존 데이터 스트림이 FirebaseProject의 기존 Firebase 앱에 해당하는지 여부를 파악합니다. 해당하는 경우 데이터 스트림과 앱이 연결됩니다. 자동 연결은 Android 앱 및 iOS 앱에만 적용됩니다.

  2. Firebase 앱에 해당하는 데이터 스트림이 없으면 각 Firebase 앱의 Google 애널리틱스 속성에 새 데이터 스트림이 프로비저닝됩니다. 새 데이터 스트림은 이전에 애널리틱스 속성의 데이터 스트림과 연결되었더라도 항상 웹 앱에 프로비저닝됩니다.

애널리틱스 문서에서 Google 애널리틱스 계정의 계층 구조와 일반 구조에 대해 자세히 알아보세요.

요청

projects.addGoogleAnalytics를 호출합니다.

project.addGoogleAnalytics 호출 예시의 요청 본문에 Google 애널리틱스 계정 analyticsAccountId를 지정합니다. 이 호출은 새 Google 애널리틱스 속성을 프로비저닝하고 새 속성을 FirebaseProject와 연결합니다.

{
  "analyticsAccountId": "<your-google-analytics-account-id>"
}

다음은 Firebase 프로젝트를 Google 애널리틱스 계정과 연결하는 Node.js의 예시입니다.

const fetch = require('node-fetch');

async function addGoogleAnalytics(projectId, analyticsAccountId) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + ':addGoogleAnalytics';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'analyticsAccountId': analyticsAccountId
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

결과

projects.addGoogleAnalytics를 호출한 결과는 Operation입니다. 프로젝트에서 다른 Firebase 관련 엔드포인트를 호출하려면 먼저 작업에 성공해야 합니다.

작업이 성공했는지 확인하려면 done 값이 true이고 responseanalyticsDetails 유형인 결과가 나올 때까지 작업에서 operations.get을 호출하면 됩니다. 작업에 실패하면 errorgoogle.rpc.Status로 설정됩니다.

다음은 operations.get 호출의 응답 본문입니다.

{
  "name": "operations/...",
  "none": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.AnalyticsDetails",
    "analyticsProperty": [
      {
        "id": "...",
        "displayName": "..."
      }
    ],
    "streamMappings": [
      {
        "app": "...",
        "streamId": "...",
        "measurementId": "..."
      }
    ]
  }
}

done이 true이고 response 유형이 analyticsDetails이므로 FirebaseProject가 이제 지정된 Google 애널리틱스 계정과 연결된 것을 알 수 있습니다. Operation은 완료 후 자동으로 삭제됩니다.

프로젝트 기본 위치 확정(선택사항)

Firebase 프로젝트에서 Cloud Firestore, Cloud Storage 또는 App Engine 앱을 구축했다면 기본 Google Cloud 서비스인 플랫폼 (GCP) 리소스 위치 프로그래매틱 방식으로 작업을 수행할 수 있습니다 참고: Firebase 콘솔.

이 위치를 설정하기 전에 프로젝트 위치 선택에서 프로젝트에 가장 적합한 위치에 대한 정보를 확인하세요. 또한 프로젝트가 Google Cloud 조직에 속하는 경우 조직 정책에 따라 프로젝트에 유효한 위치가 제한될 수 있으므로 projects.availableLocations를 호출하여 프로젝트에 유효한 위치 목록을 반환해야 합니다.

defaultLocation.finalize 메서드를 호출하면 요청 본문에 제공된 locationId에 위치한 기본 Cloud Storage 버킷App Engine 애플리케이션이 생성됩니다.

다음 경우에 기본 GCP 리소스 위치가 이미 지정되었을 수 있습니다. Project에 이미 App Engine 애플리케이션이 있거나 defaultLocation.finalize 메서드가 이전에 호출되었습니다.

요청

projects.defaultLocation.finalize를 호출합니다. 요청 본문을 구성하는 방법은 다음과 같습니다.

  • 필수:

    • locationId: GCP 서비스의 데이터가 저장되는 위치입니다. Cloud Firestore 또는 Cloud Storage입니다.
{
  "locationId": "us-west2"
}

다음은 프로젝트의 기본 위치를 확정하는 Node.js의 예시입니다.

const fetch = require('node-fetch');

async function finalizeProjectLocation(projectId, locationId) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/defaultLocation:finalize';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'locationId': locationId
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

결과

projects.defaultLocation.finalize를 호출한 결과는 Operation입니다. 프로젝트에서 다른 Firebase 관련 엔드포인트를 호출하려면 먼저 작업에 성공해야 합니다.

작업이 성공했는지 확인하려면 done 값이 true이고 responsegoogle.protobuf.Empty 유형인 결과가 나올 때까지 작업에서 operations.get을 호출하면 됩니다. 작업에 실패하면 응답 본문 errorgoogle.rpc.Status 유형이 됩니다. Operation은 완료 후 자동으로 삭제됩니다.