Thiết lập và quản lý dự án Firebase bằng API REST quản lý

API REST quản lý Firebase cho phép thiết lập và quản lý các dự án Firebase theo chương trình, bao gồm tài nguyên Firebase và Ứng dụng Firebase của dự án.

Phần 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 dự án Google Cloud hiện có hiện không sử dụng dịch vụ Firebase.

Bạn có thể chuyển đến các phần cụ thể của trang này nếu bạn chỉ muốn:

Trước khi làm theo bất kỳ bước nào trên trang này, hãy đảm bảo rằng bạn đã bật API .

Để biết thông tin về quản lý quyền truy cập cho API quản lý Firebase, hãy truy cập tài liệu API Quản lý quyền truy cập nhận dạng đám mây (IAM) .

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ã thông báo truy cập của mình .

Bật API REST quản lý cho dự án Google Cloud của bạn

Nếu chưa bật, bạn cần bật API quản lý Firebase để sử dụng với dự án Google Cloud của mình.

  1. Mở trang API quản lý Firebase trong bảng điều khiển API của Google.
  2. Khi được nhắc, hãy chọn dự án Google Cloud của bạn.
  3. Nhấp vào Bật trên trang API quản lý Firebase.

Tạo mã thông báo truy cập API của bạn

Đây là ví dụ về Node.js truy xuất mã thông báo truy cập của bạn.

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 tới khóa tài khoản dịch vụ của bạn.

Linux hoặc macOS

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-file.json"

các cửa sổ

Với PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\your\service-account-file.json"

Sau đó, sử dụng SDK quản trị Firebase để nhận mã thông báo truy cập từ thông tin đăng nhập tài khoản dịch vụ của bạn:

const admin = require('firebase-admin');

function getAccessToken() {
  return admin.credential.applicationDefault().getAccessToken()
      .then(accessToken => {
        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 của bạn

Bạn có thể tìm thấy các dự án Google Cloud có sẵn để thêm dịch vụ Firebase.

LỜI YÊU CẦU

Gọi availableProjects.list . Nội dung yêu cầu cho cuộc gọi này phải trống.

Dưới đây là ví dụ để Node.js yêu cầu danh sách các dự án Google Cloud 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 đối tượng ProjectInfo . 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ể sử dụng làm tham số truy vấn để lấy trang tiếp theo của dự án.

Dưới đây là nội dung phản hồi mẫu 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 mẫu này có hai dự án Google Cloud có thể được thêm dịch vụ Firebase vào chúng. 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 dịch vụ Firebase hoặc thêm ứng dụng vào dự án của bạn.

Trong phần tiếp theo, chúng tôi sẽ thêm các dịch vụ Firebase vào First Cloud Project bằng cách sử dụng tên tài nguyên projects/first-gcp-project .

Thêm dịch vụ Firebase vào dự án của bạ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ụ Firebase vào dự án Google Cloud hiện tại của mình theo chương trình. Lưu ý rằng bạn cũng có thể thêm dịch vụ Firebase vào dự án Google Cloud hiện có của mình trong bảng điều khiển Firebase .

LỜI YÊU CẦU

Gọi projects.addFirebase . Nội dung yêu cầu cho cuộc gọi này phải trống.

Dưới đây là ví dụ về Node.js để thêm dịch vụ Firebase vào dự án Google Cloud của bạ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 tới projects.addFirebaseOperation . Trước khi bạn có thể gọi các điểm cuối khác liên quan đến Firebase cho dự án của mình, thao tác 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 cho thao tác đó cho đến khi giá trị của donetrueresponse của nó thuộc loại FirebaseProject . Nếu thao tác không thành công, error của nó được đặt thành google.rpc.Status .

Đâ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"
    }
  }
}

donetrue và loại responseFirebaseProject nên dự án Google Cloud hiện có dịch vụ Firebase. Phản hồi cũng chứa thông tin hữu ích khác về FirebaseProject mới được tạo của bạn, như projectNumberresources mặc định của nó. Operation sẽ tự động bị xóa sau khi hoàn thành.

Thêm ứng dụng Firebase vào dự án của bạn

Nhiều ứng dụng khác nhau có thể sử dụng FirebaseProject , bao gồm ứng dụng iOS, Android và 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ó của mình theo chương trình. Lưu ý rằng bạn cũng có thể thêm Ứng dụng Firebase vào dự án Firebase hiện có của mình trong bảng điều khiển Firebase .

Chọn một loại Ứng dụng Firebase để thêm vào dự án Firebase của bạn.

Bạn có thể thêm Ứng dụng Firebase Android vào dự án Firebase hiện có của mình.

LỜI YÊU CẦU

Gọi projects.androidApps.create . Đây là cách xây dựng nội dung yêu cầu của bạn:

  • Yêu cầu:

    • packageName : Tên gói chuẩn của ứng dụng Android sẽ xuất hiện trong bảng điều khiển dành cho nhà phát triển trên Google Play.
  • Tùy chọn, nhưng được khuyến nghị:

    • displayName : Tên hiển thị do người dùng gán cho ứng dụng. Giá trị này hữu ích cho việc tìm kiếm ứng dụng của bạn sau này trong bảng điều khiển Firebase .

Trong phần nội dung yêu cầu làm ví dụ của chúng tôi, chúng tôi sẽ sử dụng packageNamedisplayName :

{
  "displayName": "My Firebase Android App"
  "packageName": "com.firebase.android"
}

Dưới đây là ví dụ về Node.js để thêm Ứng dụng Android Firebase vào dự án Firebase của bạn:

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 tới projects.androidApps.createOperation . Trước khi bạn có thể gọi các điểm cuối khác liên quan đến Firebase cho dự án của mình, thao tác 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 cho thao tác đó cho đến khi giá trị của donetrueresponse của nó thuộc loại AndroidApp . Nếu thao tác không thành công, error của nó được đặt thành google.rpc.Status .

Đâ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"
  }
}

donetrue và loại responseAndroidApp , nên FirebaseProject hiện có AndroidApp . Phản hồi cũng chứa thông tin hữu ích khác về Ứng dụng Firebase Android mới tạo của bạn, chẳng hạn như Firebase appId duy nhất. Operation sẽ tự động bị xóa sau khi hoàn thành.

Thêm chứng chỉ SHA

Bạn có thể thêm chứng chỉ SHA vào bất kỳ Ứng dụng Android Firebase hiện có nào bằng cách gọi projects.androidApps.sha.create . Phần thân 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 phiên bản ShaCertificate mới được tạo.

Khi gọi projects.androidApps.sha.create , bạn cần cung cấp hàm băm chứng chỉ SHA-1 hoặc SHA-256 hợp lệ. Bạn có thể lấy hàm băm SHA của chứng chỉ ký của mình bằng lệnh signingReport cấp độ:

./gradlew signingReport

Để biết thêm thông tin, hãy truy cập API Google dành cho Android .

Bạn có thể liên kết tài khoản Google Analytics hiện tại với FirebaseProject hiện tại của mình theo chương trình. Lưu ý rằng bạn cũng có thể liên kết dự án Firebase hiện tại của mình với Google Analytics trong tab Tích hợp của Cài đặt dự án .

Cuộc gọi đến projects.addGoogleAnalytics yêu cầu analytics_resource , có thể là analyticsAccountId hoặc analyticsPropertyId :

  • Chỉ định analyticsAccountId hiện có để cung cấp thuộc tính Google Analytics mới trong tài khoản được chỉ định và liên kết thuộc tính mới với dự án Firebase của bạn.

  • Chỉ định một analyticsPropertyId hiện có để liên kết thuộc tính Google Analytics với dự án Firebase của bạn.

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 :

  1. Lần kiểm tra đầu tiên xác định xem mọi luồng dữ liệu hiện có trong thuộc tính Google Analytics có tương ứng với bất kỳ Ứng dụng Firebase hiện có nào trong FirebaseProject của bạn hay không (dựa trên packageName hoặc bundleId được liên kết với luồng dữ liệu). Sau đó, nếu có thể, các luồng dữ liệu và ứng dụng sẽ được liên kết. Lưu ý rằng việc liên kết tự động này chỉ áp dụng cho Ứng dụng Android và Ứng dụng iOS.

  2. Nếu không tìm thấy luồng dữ liệu tương ứng cho Ứng dụng Firebase của bạn thì luồng dữ liệu mới sẽ được cung cấp trong thuộc tính Google Analytics cho từng Ứng dụng Firebase của bạn. Xin lưu ý rằng luồng dữ liệu mới luôn được cung cấp cho Ứng dụng web ngay cả khi trước đó luồng dữ liệu đó đã được liên kết với luồng dữ liệu trong thuộc tính Analytics của bạn.

Tìm hiểu thêm về thứ bậc và cấu trúc của tài khoản Google Analytics trong tài liệu Analytics .

LỜI YÊU CẦU

Gọi projects.addGoogleAnalytics .

Trong nội dung yêu cầu cho lệnh gọi ví dụ của chúng tôi tới project.addGoogleAnalytics , chúng tôi sẽ chỉ định tài khoản Google Analytics analyticsAccountId của mình. Lệnh gọi này sẽ cung cấp thuộc tính Google Analytics mới và liên kết thuộc tính mới với FirebaseProject .

{
  "analyticsAccountId": "<your-google-analytics-account-id>"
}

Dưới đây là ví dụ để 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 tới projects.addGoogleAnalyticsOperation . Trước khi bạn có thể gọi các điểm cuối khác liên quan đến Firebase cho dự án của mình, thao tác 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 cho thao tác đó cho đến khi giá trị của donetrueresponse thuộc loại analyticsDetails . Nếu thao tác không thành công, error của nó được đặt thành google.rpc.Status .

Đâ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": "..."
      }
    ]
  }
}

done là đúng và loại responseanalyticsDetails nên FirebaseProject hiện được liên kết với tài khoản Google Analytics được chỉ định. Operation sẽ tự động bị xóa sau khi hoàn thành.

Hoàn thiện vị trí mặc định của dự án của bạn (Tùy chọn)

Nếu dự án Firebase của bạn sẽ sử dụng Cloud Firestore, Cloud Storage hoặc ứng dụng App Engine, thì bạn có thể hoàn tất vị trí tài nguyên Google Cloud Platform (GCP) mặc định cho dự án của mình theo chương trình. Lưu ý rằng bạn cũng có thể chọn vị trí trong bảng điều khiển Firebase .

Trước khi đặt vị trí này, hãy xem phần Chọn vị trí cho dự án của bạn để biết thông tin về vị trí nào phù hợp nhất cho dự án của bạn. Bạn cũng nên gọi projects.availableLocations để trả về danh sách các vị trí hợp lệ cho dự án của mình vì nếu dự án của bạn là một phần của tổ chức Google Cloud thì chính sách tổ chức của bạn có thể hạn chế những vị trí hợp lệ cho dự án của bạn.

Việc gọi phương thức defaultLocation.finalize này sẽ tạo một ứng dụng App Engine với nhóm Lưu trữ đám mây mặc định nằm trong locationId mà bạn cung cấp trong nội dung yêu cầu.

Vị trí tài nguyên GCP mặc định có thể đã được chỉ định nếu Project đã có ứng dụng App Engine hoặc phương thức defaultLocation.finalize này đã được gọi trước đó.

LỜI YÊU CẦU

Gọi projects.defaultLocation.finalize . Đây là cách xây dựng nội dung yêu cầu của bạn:

  • Yêu cầu:

    • locationId : Vị trí lưu trữ dữ liệu của bạn cho các dịch vụ GCP yêu cầu cài đặt vị trí, như Cloud Firestore hoặc Cloud Storage.
{
  "locationId": "us-west2"
}

Đây là một ví dụ để Node.js hoàn thiện vị trí mặc định của dự án của bạn:

const fetch = require('node-fetch');

async function finalizeProjectLocation(projectId, locationId) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/defaultLocation:finalize';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'locationId': locationId
    }),
  };

  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 tới projects.defaultLocation.finalizeOperation . Trước khi bạn có thể gọi các điểm cuối khác liên quan đến Firebase cho dự án của mình, thao tác 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 cho thao tác đó cho đến khi giá trị của donetrueresponse của nó thuộc loại google.protobuf.Empty . Nếu thao tác không thành công, error nội dung phản hồi sẽ thuộc loại google.rpc.Status . Operation sẽ tự động bị xóa sau khi hoàn thành.