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 프로젝트에 사용할 수 있습니다.
- 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를 사용할 수 있는 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
이고 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 Console의 기존 Firebase 프로젝트
Firebase 프로젝트에 추가할 Firebase 앱 유형 선택
기존 Firebase 프로젝트에 Firebase Android 앱을 추가할 수 있습니다.
요청
projects.androidApps.create
를 호출합니다.
요청 본문을 구성하는 방법은 다음과 같습니다.
필수:
packageName
: Google Play Console에 표시되는 Android 앱의 표준 패키지 이름입니다.
권장(선택사항):
displayName
: 사용자가 지정한 앱의 표시 이름입니다. 이 값으로 나중에 Firebase Console에서 앱을 쉽게 찾을 수 있습니다.
이 예시의 요청 본문에서는 packageName
및 displayName
을 사용합니다.
{
"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
이고 response
가 AndroidApp
유형인 결과가 나올 때까지 작업에서 operations.get
을 호출하면 됩니다. 작업에 실패하면 error
가 google.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"
}
}
done
이 true
이고 response
유형이 AndroidApp
이므로 이제 FirebaseProject
에 AndroidApp
이 있는 것을 알 수 있습니다. 응답에는 고유한 Firebase appId
등 새로 만든 Firebase Android 앱에 대한 기타 유용한 정보도 포함되어 있습니다. Operation
은 완료 후 자동으로 삭제됩니다.
SHA 인증서 추가
projects.androidApps.sha.create
를 호출하여 기존 Firebase Android 앱에 SHA 인증서를 추가할 수 있습니다.
이 메서드 호출의 요청 본문에는 빈 name
필드가 있어야 합니다.
호출하면 새로 만든 ShaCertificate
인스턴스가 결과로 반환됩니다.
projects.androidApps.sha.create
를 호출할 때 유효한 SHA-1 또는 SHA-256 인증서 해시를 제공해야 합니다. Gradle signingReport
명령어를 사용하여 서명 인증서의 SHA 해시를 가져올 수 있습니다.
./gradlew signingReport
자세한 내용은 Android용 Google API를 참조하세요.
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
은 완료 후 자동으로 삭제됩니다.
프로젝트 기본 위치 확정(선택사항)
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
이고 response
가 google.protobuf.Empty
유형인 결과가 나올 때까지 작업에서 operations.get
을 호출하면 됩니다. 작업에 실패하면 응답 본문 error
가 google.rpc.Status
유형이 됩니다. Operation
은 완료 후 자동으로 삭제됩니다.