Management REST API を使用して Firebase プロジェクトを設定、管理する

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 を有効にする必要があります。

  1. Google API Console で Firebase Management API ページを開きます。
  2. 画面の指示に沿って、Google Cloud プロジェクトを選択します。
  3. 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"
    }
  }
}

donetrue であり、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 コンソールでアプリを検索する際に役立ちます。

この例のリクエスト本文では、packageNamedisplayName を使用します。

{
  "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"
  }
}

donetrue であり、response のタイプが AndroidApp であるため、FirebaseProjectAndroidApp が追加されたことがわかります。レスポンスには、新たに作成された 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 をご覧ください。

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

projects.addGoogleAnalytics の呼び出しには analytics_resource が必要です。これには analyticsAccountId または analyticsPropertyId を指定できます。

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

  • Google アナリティクスのプロパティを Firebase プロジェクトに関連付けるには、既存の analyticsPropertyId を指定します。

analyticsAccountId と既存の analyticsPropertyId はどちらも Google アナリティクスのウェブサイトで確認できます。

projects.addGoogleAnalytics を呼び出したときの動作:

  1. 最初に、Google アナリティクス プロパティの既存のデータ ストリームが FirebaseProject の既存の Firebase アプリに対応しているかどうかがチェックされます(そのデータ ストリームに関連付けられている packageName または bundleId に基づきます)。次に、データ ストリームとアプリがリンクされます(該当する場合)。この自動リンクは、Android アプリと iOS アプリにのみ適用されます。

  2. 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 は自動的に削除されます。