Firebase Management REST API を使用すると、Firebase プロジェクトの Firebase リソースや Firebase アプリなどの設定や管理をプログラムから行うことができます。
この概要では、現在 Firebase サービスを使用していない既存の Google Cloud プロジェクトに、Firebase のリソースとアプリを追加するための一般的なワークフローについて説明します。
必要に応じて、このページの特定のセクションにお進みください。
- プロジェクトに Firebase サービスを追加する
- Firebase プロジェクトに Firebase アプリを追加する
- Firebase プロジェクトを Google アナリティクス アカウントにリンクする
- プロジェクトのデフォルト ロケーションを確定する
このページの手順を行う前に、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 Console で 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 が提供するサービスを利用できます。このセクションでは、プログラムを使用して既存の 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 関連のエンドポイントを呼び出す前に、このオペレーションが正常に完了している必要があります。
オペレーションが正常に完了したかどうかを確認するには、オペレーションに対して operations.get
を呼び出します。done
の値が true
であり、response
のタイプが FirebaseProject
であれば正常に完了しています。オペレーションが失敗した場合、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 サービスが追加されたことがわかります。レスポンスには、新たに作成された FirebaseProject
に関するその他の有用な情報(projectNumber
やデフォルトの resources
など)も含まれます。完了後、Operation
は自動的に削除されます。
プロジェクトに Firebase アプリを追加する
iOS、Android、ウェブアプリなど、さまざまなアプリで FirebaseProject
を使用できます。このセクションでは、プログラムで既存の FirebaseProject
に Firebase アプリを追加する方法について説明します。Firebase コンソールで既存の Firebase プロジェクトに Firebase アプリを追加することもできます。
Firebase プロジェクトに追加する Firebase アプリの種類を選択してください。
既存の Firebase プロジェクトに Firebase Android アプリを追加できます。
リクエスト
projects.androidApps.create
を呼び出します。リクエスト本文の作成方法は次のとおりです。
必須:
packageName
: Google Play Console に表示される、Android アプリの正規パッケージ名。
推奨(省略可):
displayName
: ユーザーが割り当てたアプリの表示名。この値は、後で Firebase コンソールでアプリを検索する際に役立ちます。
この例のリクエスト本文では、packageName
と displayName
を使用します。
{
"displayName": "My Firebase Android App"
"packageName": "com.firebase.android"
}
Firebase Android アプリを Firebase プロジェクトに追加する 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 関連のエンドポイントを呼び出す前に、このオペレーションが正常に完了している必要があります。
オペレーションが正常に完了したかどうかを確認するには、オペレーションに対して operations.get
を呼び出します。done
の値が true
であり、response
のタイプが AndroidApp
であれば正常に完了しています。オペレーションが失敗した場合、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 Android アプリに関するその他の有用な情報(一意の Firebase appId
など)も含まれます。完了後、Operation
は自動的に削除されます。
SHA 証明書を追加する
既存の Firebase Android アプリに SHA 証明書を追加するには、projects.androidApps.sha.create
を呼び出します。このメソッド呼び出しのリクエスト本文には、空の name
フィールドが必要です。この呼び出しの結果は、新たに作成された ShaCertificate
のインスタンスです。
projects.androidApps.sha.create
を呼び出すときは、有効な SHA-1 または SHA-256 証明書のハッシュを指定する必要があります。次のように gradle signingReport
コマンドを使用して、署名証明書の SHA ハッシュを取得できます。
./gradlew signingReport
詳しくは、Android 用 Google API をご覧ください。
Firebase プロジェクトを Google アナリティクス アカウントにリンクする(省略可)
既存の Google アナリティクス アカウントを、プログラムで既存の FirebaseProject
にリンクできます。また、[プロジェクトの設定] の [統合] タブでも既存の Firebase プロジェクトを Google アナリティクスにリンクできます。
projects.addGoogleAnalytics
の呼び出しには analytics_resource
が必要です。これには analyticsAccountId
または analyticsPropertyId
を指定できます。
アカウント内で新しい Google アナリティクス プロパティをプロビジョニングし、その新しいプロパティを Firebase プロジェクトに関連付けるには、既存の
analyticsAccountId
を指定します。Google アナリティクスのプロパティを Firebase プロジェクトに関連付けるには、既存の
analyticsPropertyId
を指定します。
analyticsAccountId
と既存の analyticsPropertyId
はどちらも Google アナリティクスのウェブサイトで確認できます。
projects.addGoogleAnalytics
を呼び出したときの動作:
最初に、Google アナリティクス プロパティの既存のデータ ストリームが
FirebaseProject
の既存の Firebase アプリに対応しているかどうかがチェックされます(そのデータ ストリームに関連付けられているpackageName
またはbundleId
に基づきます)。次に、データ ストリームとアプリがリンクされます(該当する場合)。この自動リンクは、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 関連のエンドポイントを呼び出す前に、このオペレーションが正常に完了している必要があります。
オペレーションが正常に完了したかどうかを確認するには、オペレーションに対して operations.get
を呼び出します。done
の値が true
であり、response
のタイプが analyticsDetails
であれば正常に完了しています。オペレーションが失敗した場合、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
であるため、指定した Google アナリティクス アカウントに FirebaseProject
がリンクされたことがわかります。完了後、Operation
は自動的に削除されます。
プロジェクトのデフォルト ロケーションを確定する(省略可)
Firebase プロジェクトで Cloud Firestore、Cloud Storage、App Engine のアプリを使用する場合は、プログラムでプロジェクトのデフォルトの Google Cloud Platform(GCP)リソース ロケーションを確定できます。Firebase コンソールでロケーションを選択することもできます。
このロケーションを設定する前に、プロジェクトのロケーションを選択するを参照して、プロジェクトに最適なロケーションを確認してください。また、projects.availableLocations
を呼び出して有効なロケーションのリストを取得してください。プロジェクトが Google Cloud 組織の一部である場合、プロジェクトで選択できるロケーションが組織のポリシーで制限されている場合があるためです。
defaultLocation.finalize
メソッドを呼び出すと、App Engine アプリケーションが作成され、そのアプリケーションのデフォルトの Cloud Storage バケットのロケーションは、リクエスト本文で指定した locationId
になります。
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 関連のエンドポイントを呼び出す前に、このオペレーションが正常に完了している必要があります。
オペレーションが正常に完了したかどうかを確認するには、オペレーションに対して operations.get
を呼び出します。done
の値が true
であり、response
のタイプが google.protobuf.Empty
であれば正常に完了しています。オペレーションが失敗すると、レスポンス本文の error
のタイプは google.rpc.Status
になります。完了後、Operation
は自動的に削除されます。