Firebase Management REST API를 사용하면 프로젝트의 Firebase 리소스 및 Firebase 앱을 포함해 Firebase 프로젝트를 프로그래매틱 방식으로 설정 및 관리할 수 있습니다.
이 개요에서는 아직 Firebase 서비스를 사용하지 않는 기존 Google Cloud 프로젝트에 Firebase 리소스와 앱을 추가하는 일반적인 워크플로를 설명합니다.
원하는 경우 이 페이지의 특정 섹션으로 건너뛸 수 있습니다.
이 페이지의 단계를 진행하기 전에 API를 사용 설정해야 합니다.
Firebase Management API의 액세스 관리에 대한 자세한 내용은 Cloud Identity Access Management(IAM) API 문서를 참조하세요.
시작하기 전에
시작하기 전에 Google Cloud 프로젝트에 Management API를 사용 설정하고 액세스 토큰을 생성해야 합니다.
Google Cloud 프로젝트에 Management REST API 사용 설정
Google Cloud 프로젝트에서 사용할 Firebase Management API를 아직 사용 설정하지 않았다면 사용 설정해야 합니다.
- Google API 콘솔에서 Firebase Management API 페이지를 엽니다.
- 메시지가 표시되면 Google Cloud 프로젝트를 선택합니다.
- 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 서비스를 추가할 수 있는 Google Cloud 프로젝트 2개가 있습니다. project
필드는 프로젝트 전역에 고유한 리소스 이름을 제공합니다.
availableProjects.list
의 응답에 나열된 project
값을 사용하여 프로젝트에 Firebase 서비스를 추가하거나 앱을 추가할 수 있습니다.
다음 섹션에서는 projects/first-gcp-project
리소스 이름을 사용하여 First Cloud Project
에 Firebase 서비스를 추가합니다.
프로젝트에 Firebase 서비스 추가
Google Cloud 프로젝트는 Firebase에서 제공하는 서비스를 활용할 수 있습니다. 이 섹션에서는 Firebase 서비스를 기존 Google Cloud 프로젝트에 프로그래매틱 방식으로 추가하는 방법을 설명합니다. 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
이고 response
가 FirebaseProject
유형인 결과가 나올 때까지 작업에서 operations.get
을 호출하면 됩니다. 작업에 실패하면 error
가 google.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"
}
}
}
done
이 true
이고 response
유형이 FirebaseProject
이므로 이제 Google Cloud 프로젝트에 Firebase 서비스가 있습니다. 응답에는 projectNumber
및 기본 resources
등 새로 만든 FirebaseProject
에 대한 기타 유용한 정보도 포함되어 있습니다. Operation
은 완료 후 자동으로 삭제됩니다.
프로젝트에 Firebase 앱 추가
iOS, Android, 웹 앱 등 다양한 앱에서 FirebaseProject
를 사용할 수 있습니다. 이 섹션에서는 기존 FirebaseProject
에 Firebase 앱을 프로그래매틱 방식으로 추가하는 방법을 알아봅니다. Firebase콘솔에서도 기존 Firebase 프로젝트에 Firebase 앱을 추가할 수 있습니다.
Firebase 프로젝트에 추가할 Firebase 앱 유형 선택
Google 애널리틱스 계정에 Firebase 프로젝트 연결(선택사항)
기존 Google 애널리틱스 계정을 기존 FirebaseProject
에 프로그래매틱 방식으로 연결할 수 있습니다. 프로젝트 설정의 통합 탭에서도 기존 Firebase 프로젝트를 Google 애널리틱스에 연결할 수 있습니다.
projects.addGoogleAnalytics
를 호출하려면 analyticsAccountId
또는 analyticsPropertyId
와 같은 analytics_resource
가 필요합니다.
지정된 계정에 새 Google 애널리틱스 속성을 프로비저닝하고 새 속성을 Firebase 프로젝트에 연결하려면 기존
analyticsAccountId
를 지정합니다.Google 애널리틱스 속성을 Firebase 프로젝트에 연결하려면 기존
analyticsPropertyId
를 지정합니다.
Google 애널리틱스 웹사이트에서 analyticsAccountId
및 기존 analyticsPropertyId
를 모두 확인할 수 있습니다.
projects.addGoogleAnalytics
호출 시 참고사항
첫 번째 확인에서 데이터 스트림과 연결된
packageName
또는bundleId
를 기준으로 Google 애널리틱스 속성의 기존 데이터 스트림이FirebaseProject
의 기존 Firebase 앱에 해당하는지 여부를 파악합니다. 해당하는 경우 데이터 스트림과 앱이 연결됩니다. 자동 연결은 Android 앱 및 iOS 앱에만 적용됩니다.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
이고 response
가 analyticsDetails
유형인 결과가 나올 때까지 작업에서 operations.get
을 호출하면 됩니다. 작업에 실패하면 error
가 google.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
은 완료 후 자동으로 삭제됩니다.