Management RESTAPIを使用してFirebaseプロジェクトを設定および管理する

Firebase Management REST APIを使用すると、プロジェクトのFirebaseリソースやFirebaseアプリなど、Firebaseプロジェクトのプログラムによるセットアップと管理が可能になります。

この概要では、現在Firebaseサービスを使用していない既存のGoogleCloudプロジェクトにFirebaseリソースとアプリを追加するための一般的なワークフローについて説明します。

次の場合は、このページの特定のセクションにジャンプできます。

このページの手順を実行する前に、APIが有効になっていることを確認してください。

Firebase Management APIのアクセス管理については、 Cloud Identity Access Management(IAM)APIのドキュメントをご覧ください。

あなたが始める前に

開始する前に、Google Cloudプロジェクトの管理APIを有効にして、アクセストークンを生成する必要があります。

GoogleCloudプロジェクトの管理RESTAPIを有効にします

まだ行っていない場合は、GoogleCloudプロジェクトで使用するためにFirebaseManagementAPIを有効にする必要があります。

  1. GoogleAPIコンソールでFirebaseManagementAPIページを開きます。
  2. プロンプトが表示されたら、GoogleCloudプロジェクトを選択します。
  3. 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になり、そのresponseFirebaseProjectタイプになるまで、 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であるため、GoogleCloudプロジェクトにFirebaseサービスが追加されました。応答には、 projectNumberやデフォルトresourcesなど、新しく作成されたFirebaseProjectに関するその他の有用な情報も含まれています。 Operationは、完了後に自動的に削除されます。

プロジェクトにFirebaseアプリを追加する

iOS、Android、Webアプリなど、さまざまなアプリでFirebaseProjectを使用できます。このセクションでは、Firebaseアプリを既存のFirebaseProjectにプログラムで追加する方法を学習します。 Firebaseコンソールで既存のFirebaseプロジェクトにFirebaseアプリを追加することもできます。

Firebaseプロジェクトに追加するFirebaseアプリの種類を選択します。

プログラムで、既存のGoogleAnalyticsアカウントを既存のFirebaseProjectにリンクできます。プロジェクト設定の[統合]タブで、既存のFirebaseプロジェクトをGoogleアナリティクスにリンクすることもできます。

projects.addGoogleAnalyticsを呼び出すには、 analytics_resourceが必要です。これは、 analyticsAccountIdまたはanalyticsPropertyIdのいずれかになります。

  • 既存のanalyticsAccountIdを指定して、指定したアカウント内で新しいGoogle Analyticsプロパティをプロビジョニングし、新しいプロパティをFirebaseプロジェクトに関連付けます。

  • 既存のanalyticsPropertyIdを指定して、GoogleAnalyticsプロパティをFirebaseプロジェクトに関連付けます。

analyticsAccountIdと既存のanalyticsPropertyIdの両方は、 Googleアナリティクスのウェブサイトで見つけることができます。

projects.addGoogleAnalyticsを呼び出す場合:

  1. 最初のチェックでは、Google Analyticsプロパティの既存のデータストリームがFirebaseProjectの既存のFirebaseProjectアプリに対応しているかどうかを判断します(データストリームに関連付けられているpackageNameまたはbundleIdに基づいて)。次に、必要に応じて、データストリームとアプリがリンクされます。この自動リンクは、AndroidアプリとiOSアプリにのみ適用されることに注意してください。

  2. 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を操作で呼び出すことができます。操作が失敗した場合、その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は指定された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を呼び出します。操作が失敗した場合、応答本文のerrorgoogle.rpc.Statusタイプになります。 Operationは、完了後に自動的に削除されます。