获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

サーバーにFirebaseAdminSDKを追加します

Admin SDK は、特権環境から Firebase を操作して次のようなアクションを実行できるサーバー ライブラリのセットです。

  • 完全な管理者権限で Realtime Database データを読み書きします。
  • Firebase Cloud Messaging サーバー プロトコルに対する単純な代替アプローチを使用して、Firebase Cloud Messaging メッセージをプログラムで送信します。
  • Firebase 認証トークンを生成して検証します。
  • Firebase プロジェクトに関連付けられた Cloud Storage バケットや Cloud Firestore データベースなどの Google Cloud リソースにアクセスします。
  • ユーザー データの検索や、認証用のユーザーのメール アドレスの変更などを行うための、独自の簡素化された管理コンソールを作成します。

特権環境 (サーバーなど) からの管理者アクセスではなく、Node.js SDK をエンドユーザー アクセス (Node.js デスクトップまたは IoT アプリケーションなど) のクライアントとして使用することに関心がある場合は、代わりに、クライアント JavaScript SDK をセットアップするための指示に従う必要があります。

各言語でサポートされている Firebase 機能を示す機能マトリックスを次に示します。

特徴Node.jsジャワパイソン行けC#
カスタム トークン ミンティング
ID トークンの検証
ユーザー管理
カスタム クレームでアクセスを制御する
更新トークンの失効
ユーザーのインポート
セッション Cookie の管理
電子メール アクション リンクの生成
SAML/OIDC プロバイダー構成の管理
マルチテナンシーのサポート
リアルタイム データベース *
Firebase クラウド メッセージング
FCM マルチキャスト
FCM トピック サブスクリプションの管理
クラウドストレージ
クラウド ファイアストア
プロジェクト管理
セキュリティ ルール
ML モデル管理
Firebase Remote Config
Firebase アプリ チェック
Firebase 拡張機能

これらの使用のための Admin SDK 統合の詳細については、対応するRealtime DatabaseFCMAuthenticationRemote Config 、およびCloud Storageのドキュメントを参照してください。このページの残りの部分では、Admin SDK の基本的なセットアップに焦点を当てます。

前提条件

  • サーバーアプリがあることを確認してください。

  • 使用する Admin SDK に応じて、サーバーで次のものが実行されていることを確認してください。

    • 管理 Node.js SDK — Node.js 14+
    • 管理 Java SDK — Java 8+
    • Admin Python SDK — Python 3.6+ (Python 3.7+ を推奨)
    • 管理者 Go SDK — Go 1.15+
    • Admin .NET SDK — .NET Framework 4.6.1+ または .NET Standard 2.0 for .Net Core 2.0+

Firebase プロジェクトとサービス アカウントを設定する

Firebase Admin SDK を使用するには、次のものが必要です。

  • Firebase プロジェクト。
  • Firebase と通信するための Firebase Admin SDK サービス アカウント。このサービス アカウントは、Firebase プロジェクトを作成するか、Firebase を Google Cloud プロジェクトに追加すると、自動的に作成されます。
  • サービス アカウントの資格情報を含む構成ファイル。

Firebase プロジェクトがまだない場合は、 Firebase コンソールで作成する必要があります。 Firebase プロジェクトについて詳しくは、 Firebase プロジェクトを理解するをご覧ください。

SDK を追加する

新しいプロジェクトをセットアップする場合は、選択した言語の SDK をインストールする必要があります。

Node.js

Firebase Admin Node.js SDK は npm で利用できます。 package.jsonファイルがまだない場合は、 npm initで作成します。次に、 firebase-admin npm パッケージをインストールし、 package.jsonに保存します。

npm install firebase-admin --save

アプリケーションでモジュールを使用するには、任意の JavaScript ファイルからモジュールをrequireします。

const { initializeApp } = require('firebase-admin/app');

ES2015 を使用している場合は、モジュールをimportできます。

import { initializeApp } from 'firebase-admin/app';

ジャワ

Firebase Admin Java SDK は、Maven 中央リポジトリに公開されています。ライブラリをインストールするには、 build.gradleファイルで依存関係として宣言します。

dependencies {
  implementation 'com.google.firebase:firebase-admin:9.1.1'
}

Maven を使用してアプリケーションをビルドする場合、次の依存関係をpom.xmlに追加できます。

<dependency>
  <groupId>com.google.firebase</groupId>
  <artifactId>firebase-admin</artifactId>
  <version>9.1.1</version>
</dependency>

パイソン

Firebase Admin Python SDK はpipから入手できます。 sudoを使用して、すべてのユーザーにライブラリをインストールできます。

sudo pip install firebase-admin

または、 --userフラグを渡すことで、現在のユーザーだけにライブラリをインストールできます。

pip install --user firebase-admin

行け

Go Admin SDK は、 go getユーティリティを使用してインストールできます。

# Install as a module dependency
go get firebase.google.com/go/v4

# Install to $GOPATH
go get firebase.google.com/go

C#

.NET Admin SDK は、.NET パッケージ マネージャーを使用してインストールできます。

Install-Package FirebaseAdmin -Version 2.3.0

または、 dotnetコマンドライン ユーティリティを使用してインストールします。

dotnet add package FirebaseAdmin --version 2.3.0

または、次のパッケージ参照エントリを.csprojファイルに追加してインストールすることもできます。

<ItemGroup>
  <PackageReference Include="FirebaseAdmin" Version="2.3.0" />
</ItemGroup>

SDK を初期化する

Firebase プロジェクトを作成したら、サービス アカウント ファイルとGoogle Application Default Credentialsを組み合わせた承認戦略で SDK を初期化できます。

Firebase プロジェクトは Googleサービス アカウントをサポートしています。これを使用して、アプリサーバーまたは信頼できる環境から Firebase サーバー API を呼び出すことができます。コードをローカルで開発している場合、またはアプリケーションをオンプレミスにデプロイしている場合は、このサービス アカウントを介して取得した資格情報を使用して、サーバー リクエストを承認できます。

サービス アカウントを認証し、Firebase サービスへのアクセスを承認するには、JSON 形式で秘密鍵ファイルを生成する必要があります。

サービス アカウントの秘密鍵ファイルを生成するには:

  1. Firebase コンソールで、 [設定] > [サービス アカウント]を開きます。

  2. [ Generate New Private Key ] をクリックし、[ Generate Key ] をクリックして確認します。

  3. キーを含む JSON ファイルを安全に保管します。

サービス アカウントを介して承認する場合、資格情報をアプリケーションに提供する方法は 2 つあります。 GOOGLE_APPLICATION_CREDENTIALS環境変数を設定するか、コードでサービス アカウント キーへのパスを明示的に渡すことができます。最初のオプションはより安全であり、強くお勧めします。

環境変数を設定するには:

環境変数GOOGLE_APPLICATION_CREDENTIALSを、サービス アカウント キーを含む JSON ファイルのファイル パスに設定します。この変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定してください。

Linux または macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

ウィンドウズ

PowerShell の場合:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

上記の手順を完了すると、Application Default Credentials (ADC) は資格情報を暗黙的に決定できるようになり、Google 以外の環境でテストまたは実行するときにサービス アカウントの資格情報を使用できるようになります。

次のように SDK を初期化します。

Node.js

initializeApp({
    credential: applicationDefault(),
    databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

ジャワ

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

パイソン

default_app = firebase_admin.initialize_app()

行け

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
});

OAuth 2.0 リフレッシュ トークンの使用

Admin SDK は、 Google OAuth2更新トークンで認証できる資格情報も提供します。

Node.js

const myRefreshToken = '...'; // Get refresh token from OAuth2 flow

initializeApp({
  credential: refreshToken(myRefreshToken),
  databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

ジャワ

FileInputStream refreshToken = new FileInputStream("path/to/refreshToken.json");

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.fromStream(refreshToken))
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

パイソン

cred = credentials.RefreshToken('path/to/refreshToken.json')
default_app = firebase_admin.initialize_app(cred)

行け

opt := option.WithCredentialsFile("path/to/refreshToken.json")
config := &firebase.Config{ProjectID: "my-project-id"}
app, err := firebase.NewApp(context.Background(), config, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.FromFile("path/to/refreshToken.json"),
});

パラメータなしで初期化する

SDK は、パラメーターなしで初期化することもできます。この場合、SDK はGoogle Application Default Credentialsを使用します。 Google 環境ではデフォルトの資格情報の検索が完全に自動化されており、環境変数やその他の構成を指定する必要がないため、Compute Engine、Kubernetes Engine、App Engine、および Cloud Functions で実行されているアプリケーションには、この方法で SDK を初期化することを強くお勧めします。

オプションで Realtime Database、Cloud Storage、Cloud Functions などのサービスの初期化オプションを指定するには、 FIREBASE_CONFIG環境変数を使用します。 FIREBASE_CONFIG変数の内容が{で始まる場合、JSON オブジェクトとして解析されます。それ以外の場合、SDK は文字列がオプションを含む JSON ファイルのパスであると想定します。

Node.js

const app = initializeApp();

ジャワ

FirebaseApp.initializeApp();

パイソン

default_app = firebase_admin.initialize_app()

行け

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create();

初期化したら、Admin SDK を使用して次のタイプのタスクを実行できます。

複数のアプリを初期化する

ほとんどの場合、1 つの既定のアプリを初期化するだけで済みます。次の 2 つの同等の方法で、そのアプリからサービスにアクセスできます。

Node.js

// Initialize the default app
const defaultApp = initializeApp(defaultAppConfig);

console.log(defaultApp.name);  // '[DEFAULT]'

// Retrieve services via the defaultApp variable...
let defaultAuth = getAuth(defaultApp);
let defaultDatabase = getDatabase(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = getAuth();
defaultDatabase = getDatabase();

ジャワ

// Initialize the default app
FirebaseApp defaultApp = FirebaseApp.initializeApp(defaultOptions);

System.out.println(defaultApp.getName());  // "[DEFAULT]"

// Retrieve services by passing the defaultApp variable...
FirebaseAuth defaultAuth = FirebaseAuth.getInstance(defaultApp);
FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = FirebaseAuth.getInstance();
defaultDatabase = FirebaseDatabase.getInstance();

パイソン

# Import the Firebase service
from firebase_admin import auth

# Initialize the default app
default_app = firebase_admin.initialize_app(cred)
print(default_app.name)  # "[DEFAULT]"

# Retrieve services via the auth package...
# auth.create_custom_token(...)

行け

// Initialize default app
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Access auth service from the default app
client, err := app.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

C#

// Initialize the default app
var defaultApp = FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
});
Console.WriteLine(defaultApp.Name); // "[DEFAULT]"

// Retrieve services by passing the defaultApp variable...
var defaultAuth = FirebaseAuth.GetAuth(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = FirebaseAuth.DefaultInstance;

ユースケースによっては、同時に複数のアプリを作成する必要があります。たとえば、ある Firebase プロジェクトの Realtime Database からデータを読み取り、別のプロジェクトのカスタム トークンを作成したい場合があります。または、別々の資格情報を使用して 2 つのアプリを認証することもできます。 Firebase SDK を使用すると、それぞれ独自の構成情報を持つ複数のアプリを同時に作成できます。

Node.js

// Initialize the default app
initializeApp(defaultAppConfig);

// Initialize another app with a different config
var otherApp = initializeApp(otherAppConfig, 'other');

console.log(getApp().name);  // '[DEFAULT]'
console.log(otherApp.name);     // 'other'

// Use the shorthand notation to retrieve the default app's services
const defaultAuth = getAuth();
const defaultDatabase = getDatabase();

// Use the otherApp variable to retrieve the other app's services
const otherAuth = getAuth(otherApp);
const otherDatabase = getDatabase(otherApp);

ジャワ

// Initialize the default app
FirebaseApp defaultApp = FirebaseApp.initializeApp(defaultOptions);

// Initialize another app with a different config
FirebaseApp otherApp = FirebaseApp.initializeApp(otherAppConfig, "other");

System.out.println(defaultApp.getName());  // "[DEFAULT]"
System.out.println(otherApp.getName());    // "other"

// Use the shorthand notation to retrieve the default app's services
FirebaseAuth defaultAuth = FirebaseAuth.getInstance();
FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance();

// Use the otherApp variable to retrieve the other app's services
FirebaseAuth otherAuth = FirebaseAuth.getInstance(otherApp);
FirebaseDatabase otherDatabase = FirebaseDatabase.getInstance(otherApp);

パイソン

# Initialize the default app
default_app = firebase_admin.initialize_app(cred)

#  Initialize another app with a different config
other_app = firebase_admin.initialize_app(cred, name='other')

print(default_app.name)    # "[DEFAULT]"
print(other_app.name)      # "other"

# Retrieve default services via the auth package...
# auth.create_custom_token(...)

# Use the `app` argument to retrieve the other app's services
# auth.create_custom_token(..., app=other_app)

行け

// Initialize the default app
defaultApp, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Initialize another app with a different config
opt := option.WithCredentialsFile("service-account-other.json")
otherApp, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Access Auth service from default app
defaultClient, err := defaultApp.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

// Access auth service from other app
otherClient, err := otherApp.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

C#

// Initialize the default app
var defaultApp = FirebaseApp.Create(defaultOptions);

// Initialize another app with a different config
var otherApp = FirebaseApp.Create(otherAppConfig, "other");

Console.WriteLine(defaultApp.Name); // "[DEFAULT]"
Console.WriteLine(otherApp.Name); // "other"

// Use the shorthand notation to retrieve the default app's services
var defaultAuth = FirebaseAuth.DefaultInstance;

// Use the otherApp variable to retrieve the other app's services
var otherAuth = FirebaseAuth.GetAuth(otherApp);

Realtime Database と認証のスコープを設定する

リアルタイム データベースまたは認証用に Google アプリケーションのデフォルト認証情報を使用して Google Compute Engine VM を使用している場合は、適切なアクセス スコープも設定してください。 Realtime Database と Authentication の場合、 userinfo.emailで終わるスコープと、 cloud-platformまたはfirebase.databaseのいずれかが必要です。既存のアクセス スコープを確認して変更するには、 gcloudを使用して次のコマンドを実行します。

gcloud

# Check the existing access scopes
gcloud compute instances describe [INSTANCE_NAME] --format json

# The above command returns the service account information. For example:
  "serviceAccounts": [
   {
    "email": "your.gserviceaccount.com",
    "scopes": [
     "https://www.googleapis.com/auth/cloud-platform",
     "https://www.googleapis.com/auth/userinfo.email"
     ]
    }
  ],

# Stop the VM, then run the following command, using the service account
# that gcloud returned when you checked the scopes.

gcloud compute instances set-service-account [INSTANCE_NAME] --service-account "your.gserviceaccount.com" --scopes "https://www.googleapis.com/auth/firebase.database,https://www.googleapis.com/auth/userinfo.email"

gcloud エンドユーザー認証情報を使用したテスト

gcloud auth application-default loginを実行して取得したGoogle アプリケーションのデフォルト認証情報を使用して Admin SDK をローカルでテストする場合、次の理由により、Firebase Authentication を使用するには追加の変更が必要です。

  • Firebase Authentication は、gcloud OAuth クライアント ID を使用して生成された gcloud エンド ユーザー認証情報を受け入れません。
  • Firebase Authentication では、これらのタイプのエンドユーザー資格情報の初期化時にプロジェクト ID を提供する必要があります。

回避策として、独自のOAuth 2.0 クライアント IDを使用してgcloudで Google アプリケーションのデフォルト認証情報を生成できます。 OAuth クライアント ID は、デスクトップ アプリアプリケーション タイプである必要があります。

gcloud

gcloud auth application-default login --client-id-file=[/path/to/client/id/file]

アプリの初期化時にプロジェクト ID を明示的に指定するか、単にGOOGLE_CLOUD_PROJECT環境変数を使用することができます。後者を使用すると、コードをテストするために追加の変更を加える必要がなくなります。

プロジェクト ID を明示的に指定するには:

Node.js

import { initializeApp, applicationDefault } from 'firebase-admin/app';

initializeApp({
  credential: applicationDefault(),
  projectId: '<FIREBASE_PROJECT_ID>',
});

ジャワ

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setProjectId("<FIREBASE_PROJECT_ID>")
    .build();

FirebaseApp.initializeApp(options);

パイソン

app_options = {'projectId': '<FIREBASE_PROJECT_ID>'}
default_app = firebase_admin.initialize_app(options=app_options)

行け

config := &firebase.Config{ProjectID: "<FIREBASE_PROJECT_ID>"}
app, err := firebase.NewApp(context.Background(), config)
if err != nil {
        log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
    ProjectId = "<FIREBASE_PROJECT_ID>",
});

次のステップ

Firebase について学ぶ:

アプリに Firebase 機能を追加します。