Google I/O 2022에서 Firebase의 새로운 기능을 확인하세요. 자세히 알아보기

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

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Firebase Management REST API를 사용하면 프로젝트의 Firebase 리소스 및 Firebase 앱을 비롯한 Firebase 프로젝트를 프로그래밍 방식으로 설정하고 관리할 수 있습니다.

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

다음을 수행하려는 경우 이 페이지의 특정 섹션으로 이동할 수 있습니다.

이 페이지의 단계를 수행하기 전에 API를 활성화해야 합니다 .

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

시작하기 전에

시작하기 전에 GCP 프로젝트에 대해 관리 API를 사용 설정하고 액세스 토큰을 생성해야 합니다 .

GCP 프로젝트에 대한 관리 REST API 사용

아직 활성화하지 않았다면 Google Cloud 프로젝트에서 사용할 Firebase 관리 API 를 활성화해야 합니다.

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

API 액세스 토큰 생성

다음은 액세스 토큰을 검색하는 Node.js의 예입니다.

먼저 Google Cloud 환경이 아닌 경우 GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 서비스 계정 키의 경로로 설정합니다.

리눅스 또는 맥OS

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

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 서비스를 추가할 수 있는 두 개의 GCP 프로젝트가 있습니다. project 필드는 프로젝트에 대해 전역적으로 고유한 리소스 이름을 제공합니다.

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

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

프로젝트에 Firebase 서비스 추가

Google Cloud 프로젝트는 Firebase에서 제공하는 서비스를 활용할 수 있습니다. 이 섹션에서는 프로그래밍 방식으로 기존 Google Cloud 프로젝트에 Firebase 서비스를 추가하는 방법을 알아봅니다. Firebase 콘솔 에서 기존 Google Cloud 프로젝트에 Firebase 서비스를 추가할 수도 있습니다.

요구

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

다음은 Google Cloud 프로젝트에 Firebase 서비스를 추가하는 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 에 대해 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 를 사용할 수 있습니다. 이 섹션에서는 프로그래밍 방식으로 Firebase 앱을 기존 FirebaseProject 에 추가하는 방법을 배웁니다. Firebase 콘솔 에서 기존 Firebase 프로젝트에 Firebase 앱을 추가할 수도 있습니다.

Firebase 프로젝트에 추가할 Firebase 앱 유형을 선택하세요.

기존 Firebase 프로젝트에 Firebase Android 앱 을 추가할 수 있습니다.

요구

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

  • 필수의:

    • packageName : Google Play 개발자 콘솔에 표시되는 Android 앱의 정식 패키지 이름입니다.
  • 선택 사항이지만 권장 사항:

    • displayName : 앱의 사용자 할당 표시 이름입니다. 이 값은 나중에 Firebase 콘솔 에서 앱을 찾는 데 유용합니다.

이 예의 요청 본문에서는 packageNamedisplayName 을 사용합니다.

{
  "displayName": "My Firebase Android App"
  "packageName": "com.firebase.android"
}

다음은 Firebase 프로젝트에 Firebase Android 앱을 추가하는 Node.js의 예입니다.

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

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

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

결과

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

작업이 성공했는지 확인하려면 done 값이 true 이고 responseAndroidApp 유형이 될 때까지 operations.get 에 대해 operations.get 을 호출할 수 있습니다. 작업이 실패하면 errorgoogle.rpc.Status 로 설정됩니다.

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

{
  "name": "operations/...",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.AndroidApp",
    "name": "projects/first-cloud-project/androidApps/...",
    "appId": "...",
    "displayName": "My Firebase Android App",
    "projectId": "first-cloud-project",
    "packageName": "com.firebase.android"
  }
}

donetrue 이고 response 유형이 AndroidApp 이므로 FirebaseProject 에는 이제 AndroidApp 이 있습니다. 응답에는 고유한 Firebase appId 와 같이 새로 생성된 Firebase Android 앱에 대한 기타 유용한 정보도 포함됩니다. Operation 은 완료 후 자동으로 삭제됩니다.

SHA 인증서 추가

project.androidApps.sha.create를 호출하여 기존 Firebase Android 앱에 SHA 인증서를 추가할 수 projects.androidApps.sha.create . 이 메서드 호출에 대한 요청 본문에는 빈 name 필드가 있어야 합니다. 이 호출의 결과는 ShaCertificate 의 새로 생성된 인스턴스입니다.

projects.androidApps.sha.create 를 호출할 때 유효한 SHA-1 또는 SHA-256 인증서 해시를 제공해야 합니다. signingReport 명령을 사용하여 서명 인증서의 SHA 해시를 가져올 수 있습니다.

./gradlew signingReport

자세한 내용 은 Android용 Google API를 참조하세요.

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

projects.addGoogleAnalytics 를 호출하려면 analytics_resource 가 필요하며 이는 analyticsAccountId 또는 analyticsPropertyId 일 수 있습니다.

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

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

Google Analytics 웹사이트 에서 귀하의 analyticsAccountId 및 기존 analyticsPropertyId 를 모두 찾을 수 있습니다.

projects.addGoogleAnalytics 를 호출할 때:

  1. 첫 번째 확인은 Google Analytics 속성의 기존 데이터 스트림이 FirebaseProject의 기존 FirebaseProject 앱과 일치하는지 확인합니다(데이터 스트림과 연결된 packageName 또는 bundleId 기반). 그런 다음 해당하는 경우 데이터 스트림과 앱이 연결됩니다. 이 자동 연결은 Android 앱 및 iOS 앱에만 적용됩니다.

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

로그 분석 문서 에서 Google 웹로그 분석 계정의 계층 구조 및 구조에 대해 자세히 알아보세요.

요구

projects.addGoogleAnalytics 호출합니다.

project.addGoogleAnalytics 에 대한 예제 호출에 대한 요청 본문에서 Google Analytics 계정 analyticsAccountId 를 지정합니다. 이 호출은 새 Google Analytics 속성을 프로비저닝하고 새 속성을 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 에 대해 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 Analytics 계정에 연결되었습니다. Operation 은 완료 후 자동으로 삭제됩니다.

프로젝트의 기본 위치 마무리(선택 사항)

Firebase 프로젝트에서 Cloud Firestore, Cloud Storage 또는 App Engine 앱을 사용하는 경우 프로젝트의 기본 Google Cloud Platform(GCP) 리소스 위치 를 프로그래밍 방식으로 마무리할 수 있습니다. Firebase 콘솔 에서 위치를 선택할 수도 있습니다.

이 위치를 설정하기 전에 프로젝트 위치 선택에서 프로젝트 에 가장 적합한 위치 정보를 확인하세요. 또한 프로젝트의 유효한 위치 목록을 반환하려면 projects.availableLocations 를 호출해야 합니다. 프로젝트가 GCP 조직의 일부인 경우 조직 정책에 따라 프로젝트에 유효한 위치가 제한될 수 있기 때문입니다.

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

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

요구

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

  • 필수의:

    • locationId : Cloud Firestore 또는 Cloud Storage와 같이 위치 설정이 필요한 GCP 서비스에 대한 데이터가 저장되는 위치입니다.
{
  "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 에 대해 operations.get을 호출할 수 있습니다. 작업이 실패하면 응답 본문 errorgoogle.rpc.Status 유형이 됩니다. Operation 은 완료 후 자동으로 삭제됩니다.