Firebase Management REST APIを使用すると、プロジェクトのFirebaseリソースやFirebaseアプリなど、Firebaseプロジェクトのプログラムによるセットアップと管理が可能になります。
この概要では、現在Firebaseサービスを使用していない既存のGoogleCloudプロジェクトにFirebaseリソースとアプリを追加するための一般的なワークフローについて説明します。
次の場合は、このページの特定のセクションにジャンプできます。
- プロジェクトにFirebaseサービスを追加する
- FirebaseアプリをFirebaseプロジェクトに追加する
- FirebaseプロジェクトをGoogleAnalyticsアカウントにリンクします
- プロジェクトのデフォルトの場所を確定します
このページの手順を実行する前に、APIが有効になっていることを確認してください。
Firebase Management APIのアクセス管理については、 Cloud Identity Access Management(IAM)APIのドキュメントをご覧ください。
あなたが始める前に
開始する前に、Google Cloudプロジェクトの管理APIを有効にして、アクセストークンを生成する必要があります。
GoogleCloudプロジェクトの管理RESTAPIを有効にします
まだ行っていない場合は、GoogleCloudプロジェクトで使用するためにFirebaseManagementAPIを有効にする必要があります。
- GoogleAPIコンソールでFirebaseManagementAPIページを開きます。
- プロンプトが表示されたら、GoogleCloudプロジェクトを選択します。
- Firebase ManagementAPIページで[有効にする]をクリックします。
APIアクセストークンを生成します
アクセストークンを取得するNode.jsの例を次に示します。
まず、Google Cloud環境を使用していない場合は、 GOOGLE_APPLICATION_CREDENTIALS
環境変数をサービスアカウントキーへのパスに設定します。
LinuxまたはmacOS
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サービスを追加するために利用できるGoogleCloudプロジェクトを見つけることができます。
リクエスト
availableProjects.listを呼び出しavailableProjects.list
。この呼び出しの要求本文は空である必要があります。
Node.jsが利用可能なGoogleCloudプロジェクトのリストをリクエストする例を次に示します。
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つのGoogleCloudプロジェクトがあります。 project
フィールドは、プロジェクトのグローバル一意リソース名を提供することに注意してください。
availableProjects.list
からの応答にリストされている任意のproject
値を使用して、Firebaseサービスを追加したり、プロジェクトにアプリを追加したりできます。
次のセクションでは、 projects/first-gcp-project
First Cloud Project
名を使用してFirebaseサービスをFirstCloudProjectに追加します。
プロジェクトにFirebaseサービスを追加する
Google Cloudプロジェクトは、Firebaseが提供するサービスを利用できます。このセクションでは、Firebaseサービスを既存のGoogleCloudプロジェクトにプログラムで追加する方法を学習します。 Firebaseコンソールで既存のGoogleCloudプロジェクトにFirebaseサービスを追加することもできることに注意してください。
リクエスト
projects.addFirebase
呼び出します。この呼び出しの要求本文は空である必要があります。
Node.jsがFirebaseサービスをGoogleCloudプロジェクトに追加する例を次に示します。
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
であるため、GoogleCloudプロジェクトにFirebaseサービスが追加されました。応答には、 projectNumber
やデフォルトresources
など、新しく作成されたFirebaseProject
に関するその他の有用な情報も含まれています。 Operation
は、完了後に自動的に削除されます。
プロジェクトにFirebaseアプリを追加する
iOS、Android、Webアプリなど、さまざまなアプリでFirebaseProject
を使用できます。このセクションでは、Firebaseアプリを既存のFirebaseProject
にプログラムで追加する方法を学習します。 Firebaseコンソールで既存のFirebaseプロジェクトにFirebaseアプリを追加することもできます。
Firebaseプロジェクトに追加するFirebaseアプリの種類を選択します。
FirebaseAndroidアプリを既存のFirebaseプロジェクトに追加できます。
リクエスト
projects.androidApps.create
呼び出します。リクエスト本文を作成する方法は次のとおりです。
必須:
-
packageName
:GooglePlayデベロッパーコンソールに表示されるAndroidアプリの正規のパッケージ名。
-
オプションですが、推奨されます:
-
displayName
:ユーザーが割り当てたアプリの表示名。この値は、後でFirebaseコンソールでアプリを見つけるのに役立ちます。
-
この例のリクエスト本文では、 packageName
とdisplayName
を使用します。
{
"displayName": "My Firebase Android App"
"packageName": "com.firebase.android"
}
Node.jsがFirebaseAndroidアプリをFirebaseプロジェクトに追加する例を次に示します。
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
など、新しく作成されたFirebaseAndroidアプリに関するその他の有用な情報も含まれています。 Operation
は、完了後に自動的に削除されます。
SHA証明書を追加する
projects.androidApps.sha.create
を呼び出すことで、既存のFirebaseAndroidアプリにSHA証明書を追加できます。このメソッド呼び出しのリクエスト本文には、空のname
フィールドが必要です。この呼び出しの結果は、新しく作成されたShaCertificate
のインスタンスです。
projects.androidApps.sha.create
を呼び出すときは、有効なSHA-1またはSHA-256証明書ハッシュを提供する必要があります。 signingReport
コマンドを使用して署名証明書のSHAハッシュを取得できます:
./gradlew signingReport
詳細については、Android用のGoogleAPIにアクセスしてください。
FirebaseプロジェクトをGoogleAnalyticsアカウントにリンクします(オプション)
プログラムで、既存のGoogleAnalyticsアカウントを既存のFirebaseProject
にリンクできます。プロジェクト設定の[統合]タブで、既存のFirebaseプロジェクトをGoogleアナリティクスにリンクすることもできます。
projects.addGoogleAnalytics
を呼び出すには、 analytics_resource
が必要です。これは、 analyticsAccountId
またはanalyticsPropertyId
のいずれかになります。
既存の
analyticsAccountId
を指定して、指定したアカウント内で新しいGoogle Analyticsプロパティをプロビジョニングし、新しいプロパティをFirebaseプロジェクトに関連付けます。既存の
analyticsPropertyId
を指定して、GoogleAnalyticsプロパティをFirebaseプロジェクトに関連付けます。
analyticsAccountId
と既存のanalyticsPropertyId
の両方は、 Googleアナリティクスのウェブサイトで見つけることができます。
projects.addGoogleAnalytics
を呼び出す場合:
最初のチェックでは、Google Analyticsプロパティの既存のデータストリームがFirebaseProjectの既存の
FirebaseProject
アプリに対応しているかどうかを判断します(データストリームに関連付けられているpackageName
またはbundleId
に基づいて)。次に、必要に応じて、データストリームとアプリがリンクされます。この自動リンクは、AndroidアプリとiOSアプリにのみ適用されることに注意してください。Firebaseアプリに対応するデータストリームが見つからない場合は、各FirebaseアプリのGoogleアナリティクスプロパティで新しいデータストリームがプロビジョニングされます。新しいデータストリームは、以前にAnalyticsプロパティのデータストリームに関連付けられていた場合でも、常にWebアプリにプロビジョニングされることに注意してください。
Googleアナリティクスアカウントの階層と構造について詳しくは、アナリティクスのドキュメントをご覧ください。
リクエスト
projects.addGoogleAnalytics
呼び出します。
project.addGoogleAnalytics
の呼び出し例のリクエスト本文では、GoogleAnalyticsアカウントのanalyticsAccountId
を指定します。この呼び出しは、新しいGoogle Analyticsプロパティをプロビジョニングし、新しいプロパティをFirebaseProject
に関連付けます。
{
"analyticsAccountId": "<your-google-analytics-account-id>"
}
Node.jsがFirebaseプロジェクトをGoogleAnalyticsアカウントにリンクする例を次に示します。
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
は指定されたGoogleAnalyticsアカウントにリンクされます。 Operation
は、完了後に自動的に削除されます。
プロジェクトのデフォルトの場所を確定する(オプション)
FirebaseプロジェクトでCloudFirestore、Cloud Storage、またはApp Engineアプリを使用する場合は、プロジェクトのデフォルトのGoogle Cloud Platform(GCP)リソースの場所をプログラムで確定できます。 Firebaseコンソールで場所を選択することもできることに注意してください。
この場所を設定する前に、プロジェクトに最適な場所について、プロジェクトの場所の選択を確認してください。また、 projects.availableLocations
を呼び出して、プロジェクトの有効な場所のリストを返す必要があります。これは、プロジェクトがGoogle Cloud組織の一部である場合、組織のポリシーによって、プロジェクトに有効な場所が制限される可能性があるためです。
このdefaultLocation.finalize
メソッドを呼び出すと、リクエスト本文で指定したlocationId
にあるデフォルトのCloudStorageバケットを使用してAppEngineアプリケーションが作成されます。
Project
にすでにAppEngineアプリケーションがある場合、またはこのdefaultLocation.finalize
メソッドが以前に呼び出された場合は、デフォルトのGCPリソースの場所がすでに指定されている可能性があります。
リクエスト
projects.defaultLocation.finalize
呼び出します。リクエスト本文を作成する方法は次のとおりです。
必須:
-
locationId
:CloudFirestoreやCloudStorageなどの場所の設定が必要な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
になり、そのresponse
のタイプがgoogle.protobuf.Empty
になるまで、 operations.get
を呼び出します。操作が失敗した場合、応答本文のerror
はgoogle.rpc.Status
タイプになります。 Operation
は、完了後に自動的に削除されます。