Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Thêm SDK quản trị Firebase vào máy chủ của bạn

SDK quản trị là một tập hợp các thư viện máy chủ cho phép bạn tương tác với Firebase từ các môi trường đặc quyền để thực hiện các hành động như:

  • Đọc và ghi dữ liệu Cơ sở dữ liệu thời gian thực với đầy đủ các đặc quyền của quản trị viên.
  • Gửi tin nhắn qua đám mây Firebase theo chương trình bằng cách sử dụng phương pháp đơn giản, thay thế cho các giao thức máy chủ Nhắn tin qua đám mây của Firebase.
  • Tạo và xác minh mã thông báo xác thực Firebase.
  • Truy cập các tài nguyên của Google Cloud như nhóm Cloud Storage và cơ sở dữ liệu Cloud Firestore được liên kết với các dự án Firebase của bạn.
  • Tạo bảng điều khiển quản trị đơn giản của riêng bạn để thực hiện những việc như tra cứu dữ liệu người dùng hoặc thay đổi địa chỉ email của người dùng để xác thực.

Nếu bạn quan tâm đến việc sử dụng SDK Node.js làm ứng dụng khách để truy cập người dùng cuối (ví dụ: trong máy tính để bàn Node.js hoặc ứng dụng IoT), trái ngược với quyền truy cập quản trị từ môi trường đặc quyền (như máy chủ), bạn thay vào đó nên làm theo các hướng dẫn để thiết lập các khách hàng hoạt Javascript SDK .

Dưới đây là ma trận tính năng hiển thị những tính năng Firebase nào được hỗ trợ trong mỗi ngôn ngữ:

Đặc tính Node.js Java Python Đi NS#
Đúc tiền mã thông báo tùy chỉnh
Xác minh Mã thông báo ID
Quản lý người dùng
Kiểm soát quyền truy cập với xác nhận quyền sở hữu tùy chỉnh
Thu hồi mã thông báo làm mới
Nhập người dùng
Quản lý cookie phiên
Tạo liên kết hành động qua email
Quản lý cấu hình nhà cung cấp SAML / OIDC
Hỗ trợ nhiều người thuê nhà
Cơ sở dữ liệu thời gian thực *
Nhắn tin qua đám mây Firebase
FCM Multicast
Quản lý đăng ký chủ đề FCM
Lưu trữ đám mây
Cloud Firestore
Quản lý dự án
Quy tắc bảo mật
Quản lý mô hình ML
Cấu hình từ xa Firebase
Kiểm tra ứng dụng Firebase

Để tìm hiểu thêm thông tin về Admin tích hợp SDK cho những lợi ích, xem tương ứng với cơ sở dữ liệu thời gian thực , FCM , xác thực , từ xa Config , và Cloud Storage tài liệu. Phần còn lại của trang này tập trung vào thiết lập cơ bản cho SDK quản trị.

Điều kiện tiên quyết

  • Đảm bảo rằng bạn có ứng dụng máy chủ.

  • Đảm bảo rằng máy chủ của bạn chạy những điều sau tùy thuộc vào SDK quản trị mà bạn sử dụng:

    • Admin Node.js SDK - Node.js 12+
    • Quản trị viên Java SDK - Java 7+ (khuyên dùng Java 8+)
      Hỗ trợ Java 7 không được dùng nữa.
    • SDK Python dành cho quản trị viên - Python 3.6+
    • SDK dành cho quản trị viên Go - Go 1.11+
    • Admin .NET SDK - .NET Framework 4.5+ hoặc .Net Core 1.5+

Thiết lập tài khoản dịch vụ và dự án Firebase

Để sử dụng SDK quản trị Firebase, bạn sẽ cần những thứ sau:

  • Một dự án Firebase
  • Một tài khoản dịch vụ để giao tiếp với Firebase
  • Tệp cấu hình với thông tin đăng nhập tài khoản dịch vụ của bạn

Nếu bạn chưa có một dự án căn cứ hỏa lực, bạn cần phải tạo ra một trong các căn cứ hỏa lực console . Thăm Hiểu căn cứ hỏa lực dự án để tìm hiểu thêm về các dự án căn cứ hỏa lực.

Thêm SDK

Nếu bạn đang thiết lập một dự án mới, bạn cần cài đặt SDK cho ngôn ngữ bạn chọn.

Node.js

SDK Node.js dành cho quản trị viên của Firebase khả dụng vào npm. Nếu bạn chưa có một package.json tập tin, tạo ra một qua npm init . Tiếp theo, cài đặt các firebase-admin gói NPM và lưu nó vào bạn package.json :

$ npm install firebase-admin --save

Để sử dụng các module trong ứng dụng của bạn, require nó từ bất kỳ tập tin JavaScript:

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

Nếu bạn đang sử dụng ES2015, bạn có thể import các mô-đun:

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

Java

SDK Java dành cho quản trị viên của Firebase được xuất bản lên kho lưu trữ trung tâm Maven. Để cài đặt thư viện, tuyên bố nó như là một sự phụ thuộc vào bạn build.gradle file:

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

Nếu bạn sử dụng Maven để xây dựng ứng dụng của bạn, bạn có thể thêm phụ thuộc sau đây để bạn pom.xml :

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

Python

Các căn cứ hỏa lực quản trị Python SDK có sẵn qua pip . Bạn có thể cài đặt các thư viện cho tất cả người dùng thông qua sudo :

$ sudo pip install firebase-admin

Hoặc, bạn có thể cài đặt các thư viện để chỉ người dùng hiện bằng cách truyền --user cờ:

$ pip install --user firebase-admin

Đi

The Go SDK quản trị có thể được cài đặt bằng cách sử dụng go get tiện ích:

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

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

NS#

SDK quản trị .NET có thể được cài đặt bằng trình quản lý gói .NET:

$ Install-Package FirebaseAdmin -Version 2.2.0

Ngoài ra, cài đặt nó bằng cách sử dụng dotnet tiện ích dòng lệnh:

$ dotnet add package FirebaseAdmin --version 2.2.0

Hoặc, bạn có thể cài đặt nó bằng cách thêm mục tài liệu tham khảo gói sau vào .csproj file:

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

Khởi tạo SDK

Một khi bạn đã tạo ra một dự án căn cứ hỏa lực, bạn có thể khởi tạo SDK với một chiến lược cho phép kết hợp tập tin tài khoản dịch vụ của bạn cùng với Google Application Mặc định Credentials .

Dự án căn cứ hỏa lực hỗ trợ Google tài khoản dịch vụ , mà bạn có thể sử dụng để gọi API máy chủ căn cứ hỏa lực từ máy chủ ứng dụng của bạn hoặc môi trường đáng tin cậy. Nếu bạn đang phát triển mã cục bộ hoặc triển khai ứng dụng của mình tại chỗ, bạn có thể sử dụng thông tin đăng nhập có được qua tài khoản dịch vụ này để cho phép các yêu cầu máy chủ.

Để xác thực tài khoản dịch vụ và cho phép nó truy cập các dịch vụ Firebase, bạn phải tạo tệp khóa riêng ở định dạng JSON.

Để tạo tệp khóa riêng tư cho tài khoản dịch vụ của bạn:

  1. Trong căn cứ hỏa lực điều khiển, mở Cài đặt> Tài khoản Dịch vụ .

  2. Nhấp vào Generate New Private Key, sau đó xác nhận bằng cách nhấp Generate Key.

  3. Lưu trữ an toàn tệp JSON có chứa khóa.

Khi ủy quyền qua tài khoản dịch vụ, bạn có hai lựa chọn để cung cấp thông tin xác thực cho đơn đăng ký của mình. Bạn có thể có thể thiết lập GOOGLE_APPLICATION_CREDENTIALS biến môi trường, hoặc bạn có thể vượt qua một cách rõ ràng đường dẫn đến chìa khóa tài khoản dịch vụ trong mã. Tùy chọn đầu tiên là an toàn hơn và được khuyến khích.

Để đặt biến môi trường:

Đặt biến môi trường GOOGLE_APPLICATION_CREDENTIALS vào đường dẫn tập tin của tập tin JSON có chứa chìa khóa tài khoản dịch vụ của bạn. Biến này chỉ áp dụng cho phiên shell hiện tại của bạn, vì vậy nếu bạn mở một phiên mới, hãy đặt lại biến.

Linux hoặc macOS

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

các cửa sổ

Với PowerShell:

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

Sau khi bạn đã hoàn thành các bước trên, Thông tin đăng nhập mặc định của ứng dụng (ADC) có thể xác định ngầm thông tin đăng nhập của bạn, cho phép bạn sử dụng thông tin đăng nhập tài khoản dịch vụ khi thử nghiệm hoặc chạy trong môi trường không phải của Google.

Khởi tạo SDK như được hiển thị:

Node.js

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

Java

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

FirebaseApp.initializeApp(options);

Python

default_app = firebase_admin.initialize_app()

Đi

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

NS#

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

Sử dụng mã làm mới OAuth 2.0

SDK quản trị cũng cung cấp một chứng chỉ cho phép bạn xác thực với một OAuth2 Google làm mới mã thông báo:

Node.js

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

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

Java

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);

Python

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

Đi

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)
}

NS#

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

Khởi tạo không có tham số

SDK cũng có thể được khởi tạo mà không cần tham số. Trong trường hợp này, SDK sử dụng Google Application Mặc định Credentials . Bởi vì tra cứu thông tin xác thực mặc định hoàn toàn tự động trong môi trường của Google, không cần cung cấp các biến môi trường hoặc cấu hình khác, cách thức phức tạp hóa SDK này được khuyến nghị thực hiện cho các ứng dụng chạy trên Compute Engine, Kubernetes Engine, App Engine và Cloud Functions.

Để tùy chọn định khởi tùy chọn cho các dịch vụ như cơ sở dữ liệu thời gian thực, Cloud Storage, hoặc chức năng Cloud, sử dụng FIREBASE_CONFIG biến môi trường. Nếu nội dung của FIREBASE_CONFIG biến bắt đầu bằng một { nó sẽ được phân tích như một đối tượng JSON. Nếu không, SDK sẽ giả định rằng chuỗi là đường dẫn của tệp JSON chứa các tùy chọn.

Node.js

const app = initializeApp();

Java

FirebaseApp.initializeApp();

Python

default_app = firebase_admin.initialize_app()

Đi

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

NS#

FirebaseApp.Create();

Sau khi nó được khởi chạy, bạn có thể sử dụng SDK quản trị để hoàn thành các loại tác vụ sau:

Khởi tạo nhiều ứng dụng

Trong hầu hết các trường hợp, bạn chỉ phải khởi tạo một ứng dụng mặc định. Bạn có thể truy cập các dịch vụ từ ứng dụng đó theo hai cách tương đương:

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();

Java

// 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();

Python

# 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(...)

Đi

// 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)
}

NS#

// 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;

Một số trường hợp sử dụng yêu cầu bạn tạo nhiều ứng dụng cùng một lúc. Ví dụ: bạn có thể muốn đọc dữ liệu từ Cơ sở dữ liệu thời gian thực của một dự án Firebase và đúc mã thông báo tùy chỉnh cho một dự án khác. Hoặc bạn có thể muốn xác thực hai ứng dụng bằng thông tin đăng nhập riêng biệt. SDK Firebase cho phép bạn tạo nhiều ứng dụng cùng lúc, mỗi ứng dụng có thông tin cấu hình riêng.

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);

Java

// 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);

Python

# 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)

Đi

// 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)
}

NS#

// 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);

Đặt phạm vi cho Cơ sở dữ liệu thời gian thực và Xác thực

Nếu bạn đang sử dụng Google Compute Engine VM với Google Application Mặc định Credentials cho cơ sở dữ liệu thời gian thực hoặc xác thực, hãy chắc chắn để cũng đặt đúng phạm vi truy cập . Đối với cơ sở dữ liệu thời gian thực và xác thực, bạn cần phạm vi kết thúc bằng userinfo.email và một trong hai cloud-platform hoặc firebase.database . Để kiểm tra phạm vi truy cập hiện có và thay đổi chúng, chạy các lệnh sau sử dụng 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"

Thử nghiệm với thông tin đăng nhập người dùng cuối gcloud

Khi thử nghiệm SDK quản trị cục bộ với Google Application Mặc định Credentials thu được bằng cách chạy gcloud auth application-default login , thay đổi bổ sung là cần thiết để sử dụng căn cứ hỏa lực xác thực do sau đây:

  • Xác thực Firebase không chấp nhận thông tin đăng nhập của người dùng cuối gcloud được tạo bằng ID ứng dụng khách OAuth của gcloud.
  • Xác thực Firebase yêu cầu ID dự án phải được cung cấp khi khởi tạo cho loại thông tin đăng nhập người dùng cuối này.

Là một khắc phục, bạn có thể tạo ra Google Application Credentials mặc định trong gcloud sử dụng của riêng bạn OAuth 2.0 client ID . ID OAuth khách hàng có phải là một loại máy tính để bàn ứng dụng ứng dụng.

gcloud

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

Bạn có thể chỉ định ID dự án một cách rõ ràng trên ứng dụng khởi tạo hoặc chỉ cần sử dụng GOOGLE_CLOUD_PROJECT biến môi trường. Sau đó, tránh phải thực hiện bất kỳ thay đổi bổ sung nào để kiểm tra mã của bạn.

Để chỉ định rõ ràng ID dự án:

Node.js

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

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

Java

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

FirebaseApp.initializeApp(options);

Python

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

Đi

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)
}

NS#

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

Bước tiếp theo

Tìm hiểu về Firebase:

Thêm các tính năng của Firebase vào ứng dụng của bạn: