Firebase Management API REST cho phép thiết lập và quản lý dự án Firebase theo phương thức lập trình, bao gồm cả tài nguyên Firebase và Ứng dụng Firebase của dự án.
Bài viết tổng quan này mô tả quy trình làm việc chung để thêm tài nguyên và ứng dụng Firebase vào một Google Cloud dự án hiện có chưa sử dụng các dịch vụ của Firebase.
Bạn có thể chuyển đến các phần cụ thể trên trang này nếu chỉ muốn:
- Thêm các dịch vụ của Firebase vào dự án
- Thêm Ứng dụng Firebase vào dự án Firebase
- Liên kết dự án Firebase với tài khoản Google Analytics
Trước khi làm theo bất kỳ bước nào trên trang này, hãy nhớ bật API .
Để biết thông tin về cách quản lý quyền truy cập cho Firebase Management API, hãy xem tài liệu về Cloud Identity Access Management (IAM) API .
Trước khi bắt đầu
Trước khi bắt đầu, bạn cần bật API Quản lý cho dự án Google Cloud và tạo mã truy cập.
Bật API REST Management cho dự án Google Cloud
Nếu chưa thực hiện, bạn cần bật API Quản lý Firebase để sử dụng với dự án Google Cloud.
- Mở trang API Quản lý Firebase trong bảng điều khiển của Google API.
- Khi được nhắc, hãy chọn dự án Google Cloud.
- Nhấp vào Bật trên trang API Quản lý Firebase.
Tạo mã truy cập API
Dưới đây là ví dụ về Node.js để truy xuất mã truy cập.
Trước tiên, nếu bạn không ở trong môi trường Google Cloud, hãy đặt biến môi trường
GOOGLE_APPLICATION_CREDENTIALS thành đường dẫn đến khoá tài khoản dịch vụ.
Linux hoặc macOS
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-file.json"
Windows
Với PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\your\service-account-file.json"
Sau đó, hãy sử dụng SDK của Firebase dành cho quản trị viên để lấy mã truy cập từ thông tin đăng nhập tài khoản dịch vụ:
import { initializeApp, applicationDefault } from "firebase-admin/app";
initializeApp();
async function getAccessToken() {
try {
const accessToken = await applicationDefault().getAccessToken();
return accessToken.access_token;
} catch (err) {
console.error('Unable to get access token');
console.error(err);
}
}
Tìm tên tài nguyên của dự án
Bạn có thể tìm thấy các dự án Google Cloud có thể thêm các dịch vụ của Firebase.
YÊU CẦU
Gọi
availableProjects.list.
Nội dung yêu cầu cho lệnh gọi này phải trống.
Dưới đây là ví dụ về Node.js để yêu cầu danh sách các Google Cloud dự án có sẵn:
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);
}
}
KẾT QUẢ
Nội dung phản hồi từ lệnh gọi đến availableProjects.list chứa danh sách các
ProjectInfo
đối tượng. Nếu danh sách dự án quá dài, nội dung phản hồi cũng chứa nextPageToken mà bạn có thể dùng làm tham số truy vấn để lấy trang dự án tiếp theo.
Dưới đây là ví dụ về nội dung phản hồi của lệnh gọi availableProjects.list:
{
"projectInfo": [
{
"project": "projects/first-cloud-project",
"displayName": "First Cloud Project"
},
{
"project": "projects/second-cloud-project",
"displayName": "Second Cloud Project"
}
]
}
Phản hồi ví dụ này có 2 dự án Google Cloud có thể thêm các dịch vụ của Firebase. Xin lưu ý rằng trường project cung cấp tên tài nguyên duy nhất trên toàn cầu cho một dự án.
Bạn có thể sử dụng bất kỳ giá trị project nào được liệt kê trong phản hồi từ
availableProjects.list để thêm các dịch vụ của Firebase hoặc
thêm ứng dụng vào dự án.
Trong phần tiếp theo, chúng ta sẽ thêm các dịch vụ của Firebase vào First Cloud Project bằng tên tài nguyên projects/first-gcp-project.
Thêm các dịch vụ của Firebase vào dự án
Các dự án Google Cloud có thể tận dụng các dịch vụ do Firebase cung cấp. Trong phần này, bạn sẽ tìm hiểu cách thêm các dịch vụ của Firebase vào dự án Google Cloud hiện có theo phương thức lập trình. Xin lưu ý rằng bạn cũng có thể thêm các dịch vụ của Firebase vào dự án Google Cloud hiện có trong bảng điều khiển của Firebase.
YÊU CẦU
Gọi
projects.addFirebase.
Nội dung yêu cầu cho lệnh gọi này phải trống.
Dưới đây là ví dụ về Node.js để thêm các dịch vụ của Firebase vào Google Cloud dự án:
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']);
}
}
KẾT QUẢ
Kết quả của lệnh gọi đến projects.addFirebase là an
Operation. Trước khi có thể gọi các điểm cuối khác liên quan đến Firebase cho dự án, thao tác này phải thành công.
Để kiểm tra xem thao tác có thành công hay không, bạn có thể gọi
operations.get
trên thao tác cho đến khi giá trị của done là true và response của thao tác đó thuộc
loại FirebaseProject. Nếu thao tác không thành công, error của thao tác đó sẽ được đặt thành google.rpc.Status.
Dưới đây là nội dung phản hồi của lệnh gọi 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"
}
}
}
Vì done là true và loại response là FirebaseProject, nên dự án
Google Cloud hiện có các dịch vụ của Firebase. Phản hồi này cũng chứa các thông tin hữu ích khác về FirebaseProject mới tạo, chẳng hạn như projectNumber và resources mặc định. Operation sẽ tự động bị xoá sau khi hoàn tất.
Thêm Ứng dụng Firebase vào dự án
Nhiều ứng dụng có thể sử dụng FirebaseProject, bao gồm cả ứng dụng iOS, Android và ứng dụng web. Trong phần này, bạn sẽ tìm hiểu cách thêm Ứng dụng Firebase vào FirebaseProject hiện có theo phương thức lập trình. Xin lưu ý rằng bạn cũng có thể thêm Ứng dụng Firebase vào
dự án Firebase hiện có trong Firebase bảng điều khiển.
Chọn loại Ứng dụng Firebase để thêm vào dự án Firebase.
iOS+
Bạn có thể thêm Ứng dụng Firebase cho iOS vào dự án Firebase hiện có.
YÊU CẦU
Gọi
projects.iosApps.create.
Sau đây là cách tạo nội dung yêu cầu:
Bắt buộc:
bundleId: Mã nhận dạng gói chính tắc của ứng dụng iOS như trong App Store trên iOS.
Bạn nên (không bắt buộc):
displayName: Tên hiển thị do người dùng chỉ định cho ứng dụng. Giá trị này hữu ích để tìm ứng dụng sau này trong Firebase bảng điều khiển.appStoreId: Mã Apple do Apple tự động tạo và chỉ định cho ứng dụng của bạn. Hãy chỉ địnhappStoreIdnếu Apple đã chỉ định mã này.
Trong nội dung yêu cầu cho ví dụ này, chúng ta sẽ chỉ sử dụng displayName và bundleId:
{
"displayName": "My Firebase iOS App",
"bundleId": "com.firebase.ios"
}
Dưới đây là ví dụ về Node.js để thêm Ứng dụng Firebase cho iOS vào dự án Firebase:
const fetch = require('node-fetch');
async function addIosApp(projectId, displayName, bundleId) {
const accessToken = getAccessToken();
const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/iosApps';
const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + accessToken,
},
body: JSON.stringify({
'displayName': displayName,
'bundleId': bundleId
}),
};
try {
const rawResponse = await fetch(uri, options);
const resp = await rawResponse.json();
console.log(resp);
} catch(err) {
console.error(err['message']);
}
}
KẾT QUẢ
Kết quả của lệnh gọi đến projects.iosApps.create là an
Operation. Trước khi có thể gọi các điểm cuối khác liên quan đến Firebase cho dự án, thao tác này phải thành công.
Để kiểm tra xem thao tác có thành công hay không, bạn có thể gọi
operations.get
trên thao tác cho đến khi giá trị của done là true và response của thao tác đó thuộc
loại IosApp. Nếu thao tác không thành công, error của thao tác đó sẽ được đặt thành google.rpc.Status.
Dưới đây là nội dung phản hồi của lệnh gọi operations.get:
{
"name": "operations/...",
"done": true,
"response": {
"@type": "type.googleapis.com/google.firebase.service.v1beta1.IosApp",
"name": "projects/first-cloud-project/iosApps/...",
"appId": "...",
"displayName": "My Firebase iOS App",
"projectId": "first-cloud-project",
"bundleId": "com.firebase.ios"
}
}
Vì done là true và loại response là IosApp, nên FirebaseProject hiện có IosApp. Phản hồi này cũng chứa các thông tin hữu ích khác về Ứng dụng Firebase cho iOS mới tạo, chẳng hạn như appId duy nhất của Firebase. Operation sẽ tự động bị xoá sau khi hoàn tất.
Android
Bạn có thể thêm Ứng dụng Firebase cho Android vào dự án Firebase hiện có.
YÊU CẦU
Gọi
projects.androidApps.create.
Sau đây là cách tạo nội dung yêu cầu:
Bắt buộc:
packageName: Tên gói chính tắc của ứng dụng Android như trong Google Play Console.
Bạn nên (không bắt buộc):
displayName: Tên hiển thị do người dùng chỉ định cho ứng dụng. Giá trị này hữu ích để tìm ứng dụng sau này trong Firebase bảng điều khiển.
Trong nội dung yêu cầu cho ví dụ này, chúng ta sẽ sử dụng packageName và displayName:
{
"displayName": "My Firebase Android App"
"packageName": "com.firebase.android"
}
Dưới đây là ví dụ về Node.js để thêm Ứng dụng Firebase cho Android vào dự án Firebase:
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']);
}
}
KẾT QUẢ
Kết quả của lệnh gọi đến projects.androidApps.create là an
Operation. Trước khi có thể gọi các điểm cuối khác liên quan đến Firebase cho dự án, thao tác này phải thành công.
Để kiểm tra xem thao tác có thành công hay không, bạn có thể gọi
operations.get
trên thao tác cho đến khi giá trị của done là true và response của thao tác đó thuộc
loại AndroidApp. Nếu thao tác không thành công, error của thao tác đó sẽ được đặt thành google.rpc.Status.
Dưới đây là nội dung phản hồi của lệnh gọi 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"
}
}
Vì done là true và loại response là AndroidApp, nên FirebaseProject hiện có AndroidApp. Phản hồi này cũng chứa các thông tin hữu ích khác về Ứng dụng Firebase cho Android mới tạo, chẳng hạn như appId duy nhất của Firebase. Operation sẽ tự động bị xoá sau khi hoàn tất.
Thêm chứng chỉ SHA
Bạn có thể thêm chứng chỉ SHA vào bất kỳ Ứng dụng Firebase cho Android hiện có nào bằng cách gọi
projects.androidApps.sha.create.
Nội dung yêu cầu cho lệnh gọi phương thức này phải có trường name trống.
Kết quả của lệnh gọi này là một thực thể mới tạo của
ShaCertificate.
Khi gọi projects.androidApps.sha.create, bạn cần cung cấp giá trị băm chứng chỉ SHA-1 hoặc SHA-256 hợp lệ. Bạn có thể lấy giá trị băm SHA của chứng chỉ ký bằng lệnh signingReport của gradle:
./gradlew signingReport
Để biết thêm thông tin, hãy xem bài viết API Google cho Android.
Web
Bạn có thể thêm Ứng dụng Firebase cho web vào dự án Firebase hiện có.
YÊU CẦU
Gọi
projects.webApps.create.
Sau đây là cách tạo nội dung yêu cầu:
Tùy chọn:
displayName: Tên hiển thị do người dùng chỉ định cho ứng dụng. Giá trị này hữu ích để tìm ứng dụng sau này trong Firebase bảng điều khiển.
Không nên dùng:
appUrls: URL đủ điều kiện nơi lưu trữ ứng dụng. Khi một Ứng dụng Firebase cho web được liên kết với một trang web trên Firebase Hosting, Firebase sẽ tự động điền các trường này, vì vậy hãy để trống các trường này trong nội dung yêu cầu.
Chúng ta sẽ chỉ chỉ định displayName trong nội dung yêu cầu cho ví dụ này:
{
"displayName": "My Firebase Web App"
}
Dưới đây là ví dụ về Node.js để thêm Ứng dụng Firebase cho web vào dự án Firebase:
const fetch = require('node-fetch');
async function addWebApp(projectId, displayName) {
const accessToken = getAccessToken();
const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/webApps';
const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + accessToken,
},
body: JSON.stringify({
'displayName': displayName
}),
};
try {
const rawResponse = await fetch(uri, options);
const resp = await rawResponse.json();
console.log(resp);
} catch(err) {
console.error(err['message']);
}
}
KẾT QUẢ
Kết quả của lệnh gọi đến projects.webApps.create là an
Operation. Trước khi có thể gọi các điểm cuối khác liên quan đến Firebase cho dự án, thao tác này phải thành công.
Để kiểm tra xem thao tác có thành công hay không, bạn có thể gọi
operations.get
trên thao tác cho đến khi giá trị của done là true và response của thao tác đó thuộc
loại WebApp. Nếu thao tác không thành công, error của thao tác đó sẽ được đặt thành google.rpc.Status.
Dưới đây là nội dung phản hồi của lệnh gọi operations.get:
{
"name": "operations/...",
"done": true,
"response": {
"@type": "type.googleapis.com/google.firebase.service.v1beta1.WebApp",
"name": "projects/first-cloud-project/webApps/...",
"appId": "...",
"displayName": "My Firebase Web App",
"projectId": "first-cloud-project"
}
}
Vì done là true và loại response là WebApp, nên FirebaseProject hiện có WebApp. Phản hồi này cũng chứa các thông tin hữu ích khác về Ứng dụng Firebase cho web mới tạo, chẳng hạn như appId duy nhất của Firebase. Operation sẽ tự động bị xoá sau khi hoàn tất.
Liên kết dự án Firebase với tài khoản Google Analytics (Không bắt buộc)
Bạn có thể liên kết
tài khoản Google Analytics hiện có với
FirebaseProject hiện có theo phương thức lập trình. Xin lưu ý rằng bạn cũng có thể liên kết dự án Firebase hiện có với Google Analytics trong thẻ Tích hợp của Cài đặt dự án.
Lệnh gọi đến projects.addGoogleAnalytics yêu cầu analytics_resource, có thể là analyticsAccountId hoặc analyticsPropertyId:
Chỉ định
analyticsAccountIdhiện có để cung cấp một tài sản Google Analytics mới trong tài khoản đã chỉ định và liên kết tài sản mới với dự án Firebase.Chỉ định
analyticsPropertyIdhiện có để liên kết tài sản Google Analytics với dự án Firebase.
Bạn có thể tìm thấy cả analyticsAccountId và bất kỳ
analyticsPropertyId hiện có nào trên trang web Google Analytics.
Khi bạn gọi projects.addGoogleAnalytics:
Lần kiểm tra đầu tiên sẽ xác định xem có luồng dữ liệu hiện có nào trong tài sản Google Analytics tương ứng với bất kỳ Ứng dụng Firebase hiện có nào trong
FirebaseProjecthay không (dựa trênpackageNamehoặcbundleIdđược liên kết với luồng dữ liệu). Sau đó, tuỳ theo trường hợp, các luồng dữ liệu và ứng dụng sẽ được liên kết. Xin lưu ý rằng tính năng tự động liên kết này chỉ áp dụng cho Ứng dụng Android và Ứng dụng iOS.Nếu không tìm thấy luồng dữ liệu tương ứng cho Ứng dụng Firebase, thì các luồng dữ liệu mới sẽ được cung cấp trong tài sản Google Analytics cho từng Ứng dụng Firebase. Xin lưu ý rằng một luồng dữ liệu mới sẽ luôn được cung cấp cho Ứng dụng web ngay cả khi ứng dụng đó đã được liên kết với một luồng dữ liệu trong tài sản Analytics.
Tìm hiểu thêm về hệ thống phân cấp và cấu trúc của tài khoản Google Analytics trong tài liệu về Analytics.
YÊU CẦU
Gọi
projects.addGoogleAnalytics.
Trong nội dung yêu cầu cho lệnh gọi ví dụ đến project.addGoogleAnalytics, chúng ta sẽ chỉ định tài khoản Google Analytics analyticsAccountId. Lệnh gọi này sẽ cung cấp một tài sản Google Analytics mới và liên kết tài sản mới với FirebaseProject.
{
"analyticsAccountId": "<your-google-analytics-account-id>"
}
Dưới đây là ví dụ về Node.js để liên kết dự án Firebase với tài khoản Google Analytics:
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']);
}
}
KẾT QUẢ
Kết quả của lệnh gọi đến projects.addGoogleAnalytics là an
Operation. Trước khi có thể gọi các điểm cuối khác liên quan đến Firebase cho dự án, thao tác này phải thành công.
Để kiểm tra xem thao tác có thành công hay không, bạn có thể gọi operations.get trên thao tác cho đến khi giá trị của done là true và response của thao tác đó thuộc loại analyticsDetails. Nếu thao tác không thành công, error của thao tác đó sẽ được đặt thành google.rpc.Status.
Dưới đây là nội dung phản hồi của lệnh gọi operations.get:
{
"name": "operations/...",
"none": true,
"response": {
"@type": "type.googleapis.com/google.firebase.service.v1beta1.AnalyticsDetails",
"analyticsProperty": [
{
"id": "...",
"displayName": "..."
}
],
"streamMappings": [
{
"app": "...",
"streamId": "...",
"measurementId": "..."
}
]
}
}
Vì done là true và loại response là analyticsDetails, nên FirebaseProject hiện được liên kết với tài khoản Google Analytics đã chỉ định. Operation sẽ tự động bị xoá sau khi hoàn tất.