Admin SDK adalah sekumpulan pustaka server yang memungkinkan Anda berinteraksi dengan Firebase dari lingkungan istimewa untuk melakukan tindakan seperti:
- Membaca dan menulis data Realtime Database dengan hak istimewa admin penuh.
- Secara terprogram mengirim pesan Firebase Cloud Messaging menggunakan pendekatan alternatif sederhana ke protokol server Firebase Cloud Messaging.
- Buat dan verifikasi token autentikasi Firebase.
- Akses resource Google Cloud seperti bucket Cloud Storage dan database Cloud Firestore yang terkait dengan project Firebase Anda.
- Buat konsol admin Anda sendiri yang disederhanakan untuk melakukan hal-hal seperti mencari data pengguna atau mengubah alamat email pengguna untuk autentikasi.
Jika Anda tertarik menggunakan Node.js SDK sebagai klien untuk akses pengguna akhir (misalnya, di desktop Node.js atau aplikasi IoT), bukan akses admin dari lingkungan istimewa (seperti server), Anda sebagai gantinya harus mengikuti petunjuk untuk menyiapkan klien JavaScript SDK .
Berikut adalah matriks fitur yang menunjukkan fitur Firebase yang didukung di setiap bahasa:
Untuk mempelajari lebih lanjut integrasi Admin SDK untuk penggunaan ini, lihat dokumentasi Realtime Database , FCM , Authentication , Remote Config , dan Cloud Storage terkait. Bagian selanjutnya dari halaman ini berfokus pada penyiapan dasar untuk Admin SDK.
Prasyarat
Pastikan Anda memiliki aplikasi server.
Pastikan server Anda menjalankan hal berikut bergantung pada Admin SDK mana yang Anda gunakan:
- Admin Node.js SDK — Node.js 14+
- Admin Java SDK — Java 8+
- Admin Python SDK — Python 3.6+ (merekomendasikan Python 3.7+)
- SDK Admin Go — Mulai 1.15+
- Admin .NET SDK — .NET Framework 4.6.1+ atau .NET Standard 2.0 untuk .Net Core 2.0+
Siapkan proyek Firebase dan akun layanan
Untuk menggunakan Firebase Admin SDK, Anda memerlukan hal berikut:
- Proyek Firebase.
- Akun layanan Firebase Admin SDK untuk berkomunikasi dengan Firebase. Akun layanan ini dibuat secara otomatis saat Anda membuat project Firebase atau menambahkan Firebase ke project Google Cloud.
- File konfigurasi dengan kredensial akun layanan Anda.
Jika Anda belum memiliki proyek Firebase, Anda harus membuatnya di konsol Firebase . Kunjungi Memahami Proyek Firebase untuk mempelajari lebih lanjut tentang proyek Firebase.
Tambahkan SDK
Jika Anda menyiapkan proyek baru, Anda perlu memasang SDK untuk bahasa pilihan Anda.
Node.js
Firebase Admin Node.js SDK tersedia di npm. Jika Anda belum memiliki file package.json
, buatlah melalui npm init
. Selanjutnya, instal paket firebase-admin
dan simpan ke package.json
Anda:
npm install firebase-admin --save
Untuk menggunakan modul dalam aplikasi Anda, require
dari file JavaScript apa pun:
const { initializeApp } = require('firebase-admin/app');
Jika Anda menggunakan ES2015, Anda dapat import
modul:
import { initializeApp } from 'firebase-admin/app';
Jawa
Firebase Admin Java SDK dipublikasikan ke repositori pusat Maven. Untuk menginstal library, deklarasikan sebagai dependensi di file build.gradle
Anda:
dependencies {
implementation 'com.google.firebase:firebase-admin:9.1.1'
}
Jika Anda menggunakan Maven untuk membuat aplikasi, Anda dapat menambahkan dependensi berikut ke pom.xml
Anda:
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>9.1.1</version>
</dependency>
Piton
Firebase Admin Python SDK tersedia melalui pip . Anda dapat menginstal perpustakaan untuk semua pengguna melalui sudo
:
sudo pip install firebase-admin
Atau, Anda dapat menginstal pustaka hanya untuk pengguna saat ini dengan meneruskan flag --user
:
pip install --user firebase-admin
Pergi
Go Admin SDK dapat diinstal menggunakan utilitas 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 dapat diinstal menggunakan pengelola paket .NET:
Install-Package FirebaseAdmin -Version 2.3.0
Atau, instal menggunakan utilitas baris perintah dotnet
:
dotnet add package FirebaseAdmin --version 2.3.0
Atau, Anda dapat menginstalnya dengan menambahkan entri referensi paket berikut ke file .csproj
Anda:
<ItemGroup>
<PackageReference Include="FirebaseAdmin" Version="2.3.0" />
</ItemGroup>
Inisialisasi SDK
Setelah membuat proyek Firebase, Anda dapat menginisialisasi SDK dengan Kredensial Default Aplikasi Google . Karena pencarian kredensial default sepenuhnya otomatis di lingkungan Google, tanpa perlu menyediakan variabel lingkungan atau konfigurasi lainnya, cara menginisialisasi SDK ini sangat disarankan untuk aplikasi yang berjalan di lingkungan Google seperti Cloud Run, App Engine, dan Cloud Functions.
Untuk menentukan opsi inisialisasi secara opsional untuk layanan seperti Realtime Database, Cloud Storage, atau Cloud Functions, gunakan variabel lingkungan FIREBASE_CONFIG
. Jika konten variabel FIREBASE_CONFIG
dimulai dengan {
maka akan diuraikan sebagai objek JSON. Kalau tidak, SDK menganggap bahwa string adalah jalur file JSON yang berisi opsi.
Node.js
const app = initializeApp();
Jawa
FirebaseApp.initializeApp();
Piton
default_app = firebase_admin.initialize_app()
Pergi
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
log.Fatalf("error initializing app: %v\n", err)
}
C#
FirebaseApp.Create();
Setelah diinisialisasi, Anda dapat menggunakan Admin SDK untuk menyelesaikan jenis tugas berikut:
- Terapkan autentikasi khusus
- Kelola pengguna Firebase Authentication Anda
- Membaca dan menulis data dari Realtime Database
- Kirim pesan Firebase Cloud Messaging
Menggunakan token penyegaran OAuth 2.0
SDK Admin juga menyediakan kredensial yang memungkinkan Anda mengautentikasi dengan token penyegaran Google OAuth2 :
Node.js
const myRefreshToken = '...'; // Get refresh token from OAuth2 flow
initializeApp({
credential: refreshToken(myRefreshToken),
databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});
Jawa
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);
Piton
cred = credentials.RefreshToken('path/to/refreshToken.json')
default_app = firebase_admin.initialize_app(cred)
Pergi
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"),
});
Inisialisasi SDK di lingkungan non-Google
Jika Anda bekerja di lingkungan server non-Google tempat pencarian kredensial default tidak dapat diotomatisasi sepenuhnya, Anda dapat menginisialisasi SDK dengan file kunci akun layanan yang diekspor.
Proyek Firebase mendukung akun layanan Google , yang dapat Anda gunakan untuk memanggil API server Firebase dari server aplikasi atau lingkungan tepercaya. Jika Anda mengembangkan kode secara lokal atau menerapkan aplikasi secara lokal, Anda dapat menggunakan kredensial yang diperoleh melalui akun layanan ini untuk mengotorisasi permintaan server.
Untuk mengautentikasi akun layanan dan mengotorisasinya untuk mengakses layanan Firebase, Anda harus membuat file kunci pribadi dalam format JSON.
Untuk menghasilkan file kunci pribadi untuk akun layanan Anda:
Di konsol Firebase, buka Pengaturan > Akun Layanan .
Klik Generate New Private Key , lalu konfirmasikan dengan mengklik Generate Key .
Simpan file JSON yang berisi kunci dengan aman.
Saat memberi otorisasi melalui akun layanan, Anda memiliki dua pilihan untuk memberikan kredensial ke aplikasi Anda. Anda dapat menyetel variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS , atau secara eksplisit meneruskan jalur ke kunci akun layanan dalam kode. Opsi pertama lebih aman dan sangat disarankan.
Untuk mengatur variabel lingkungan:
Setel variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS ke jalur file dari file JSON yang berisi kunci akun layanan Anda. Variabel ini hanya berlaku untuk sesi shell Anda saat ini, jadi jika Anda membuka sesi baru, atur kembali variabel tersebut.
Linux atau macOS
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
Windows
Dengan PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
Setelah Anda menyelesaikan langkah-langkah di atas, Application Default Credentials (ADC) dapat menentukan kredensial Anda secara implisit, memungkinkan Anda menggunakan kredensial akun layanan saat menguji atau menjalankan di lingkungan non-Google.
Inisialisasi SDK seperti yang ditunjukkan:
Node.js
initializeApp({
credential: applicationDefault(),
databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});
Jawa
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
Piton
default_app = firebase_admin.initialize_app()
Pergi
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(),
});
Inisialisasi beberapa aplikasi
Dalam kebanyakan kasus, Anda hanya perlu menginisialisasi satu aplikasi default. Anda dapat mengakses layanan dari aplikasi itu dengan dua cara yang setara:
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();
Jawa
// 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();
Piton
# 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(...)
Pergi
// 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;
Beberapa kasus penggunaan mengharuskan Anda membuat beberapa aplikasi sekaligus. Misalnya, Anda mungkin ingin membaca data dari Realtime Database dari satu proyek Firebase dan membuat token khusus untuk proyek lainnya. Atau Anda mungkin ingin mengautentikasi dua aplikasi dengan kredensial terpisah. Firebase SDK memungkinkan Anda membuat beberapa aplikasi sekaligus, masing-masing dengan informasi konfigurasinya sendiri.
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);
Jawa
// 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);
Piton
# 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)
Pergi
// 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);
Tetapkan cakupan untuk Realtime Database dan Authentication
Jika Anda menggunakan VM Google Compute Engine dengan Kredensial Default Aplikasi Google untuk Database atau Autentikasi Realtime, pastikan juga menyetel cakupan akses yang tepat . Untuk Realtime Database dan Authentication, Anda memerlukan cakupan yang diakhiri dengan userinfo.email
dan cloud-platform
atau firebase.database
. Untuk memeriksa cakupan akses yang ada dan mengubahnya, jalankan perintah berikut menggunakan 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"
Menguji dengan kredensial pengguna akhir gcloud
Saat menguji Admin SDK secara lokal dengan Google Application Default Credentials yang diperoleh dengan menjalankan gcloud auth application-default login
, perubahan tambahan diperlukan untuk menggunakan Firebase Authentication karena hal berikut:
- Firebase Authentication tidak menerima kredensial pengguna akhir gcloud yang dibuat menggunakan ID klien gcloud OAuth.
- Firebase Authentication mengharuskan ID proyek diberikan saat inisialisasi untuk jenis kredensial pengguna akhir ini.
Sebagai solusinya, Anda dapat membuat Kredensial Default Aplikasi Google di gcloud menggunakan ID klien OAuth 2.0 Anda sendiri. ID klien OAuth harus berupa jenis aplikasi aplikasi Desktop .
gcloud
gcloud auth application-default login --client-id-file=[/path/to/client/id/file]
Anda dapat menentukan ID proyek secara eksplisit pada inisialisasi aplikasi atau cukup gunakan variabel lingkungan GOOGLE_CLOUD_PROJECT
. Yang terakhir menghindari kebutuhan untuk membuat perubahan tambahan untuk menguji kode Anda.
Untuk menentukan ID proyek secara eksplisit:
Node.js
import { initializeApp, applicationDefault } from 'firebase-admin/app';
initializeApp({
credential: applicationDefault(),
projectId: '<FIREBASE_PROJECT_ID>',
});
Jawa
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.setProjectId("<FIREBASE_PROJECT_ID>")
.build();
FirebaseApp.initializeApp(options);
Piton
app_options = {'projectId': '<FIREBASE_PROJECT_ID>'}
default_app = firebase_admin.initialize_app(options=app_options)
Pergi
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>",
});
Langkah selanjutnya
Pelajari tentang Firebase:
Jelajahi contoh aplikasi Firebase .
Jelajahi kode sumber terbuka di GitHub untuk Node.js , Java , dan Python .
Baca postingan blog terkait Admin SDK oleh salah satu pembuat Admin SDK. Contoh: Mengakses Firestore dan Firebase melalui server proxy .
Tambahkan fitur Firebase ke aplikasi Anda:
- Tulis backend tanpa server dengan Cloud Functions .
- Simpan info dengan Realtime Database atau blob data dengan Cloud Storage .
- Terima notifikasi dengan Cloud Messaging .