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 機能を示す機能マトリックスを次に示します。
これらの使用のための Admin SDK 統合の詳細については、対応するRealtime Database 、 FCM 、 Authentication 、 Remote 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 プロジェクトを作成したら、SDK をGoogle Application Default Credentialsで初期化できます。 Google 環境ではデフォルトの資格情報の検索が完全に自動化されており、環境変数やその他の構成を指定する必要がないため、Cloud Run、App Engine、Cloud Functions などの Google 環境で実行されるアプリケーションには、この方法で 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 を使用して次のタイプのタスクを実行できます。
- カスタム認証を実装する
- Firebase Authentication ユーザーを管理する
- Realtime Database からのデータの読み取りと書き込み
- Firebase Cloud Messaging メッセージを送信する
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"),
});
Google 以外の環境で SDK を初期化する
デフォルトの資格情報の検索を完全に自動化できない Google 以外のサーバー環境で作業している場合は、エクスポートされたサービス アカウント キー ファイルを使用して SDK を初期化できます。
Firebase プロジェクトは Googleサービス アカウントをサポートしています。これを使用して、アプリサーバーまたは信頼できる環境から Firebase サーバー API を呼び出すことができます。コードをローカルで開発している場合、またはアプリケーションをオンプレミスにデプロイしている場合は、このサービス アカウントを介して取得した資格情報を使用して、サーバー リクエストを承認できます。
サービス アカウントを認証し、Firebase サービスへのアクセスを承認するには、JSON 形式で秘密鍵ファイルを生成する必要があります。
サービス アカウントの秘密鍵ファイルを生成するには:
Firebase コンソールで、 [設定] > [サービス アカウント]を開きます。
[ Generate New Private Key ] をクリックし、[ Generate Key ] をクリックして確認します。
キーを含む 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(),
});
複数のアプリを初期化する
ほとんどの場合、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 アプリを調べる。
Admin SDK の作成者の 1 人によるAdmin SDK 関連のブログ投稿をお読みください。例:プロキシ サーバー経由で Firestore と Firebase にアクセスする。
アプリに Firebase 機能を追加します。
- Cloud Functionsを使用してサーバーレス バックエンドを作成します。
- Realtime Databaseで情報を保存するか、 Cloud Storageで blob データを保存します。
- Cloud Messagingで通知を受け取ります。