Viết Hàm đám mây cho một tiện ích

Khi tạo một tiện ích, bạn sẽ viết logic của tiện ích đó bằng cách sử dụng Cloud Functions, theo cách tương tự như khi bạn viết một hàm chỉ được dùng trong dự án của riêng bạn. Bạn khai báo các hàm trong tệp extension.yaml và khi người dùng cài đặt tiện ích, các hàm này sẽ được triển khai vào dự án của họ.

Hãy xem tài liệu về Cloud Functions để biết thông tin chung về cách sử dụng Cloud Functions.

Thế hệ thứ 1 và thứ 2 Cloud Functions

Firebase hỗ trợ cả thế hệ thứ nhất và thế hệ thứ hai của Cloud Functions. Tuy nhiên, Firebase Extensions hiện có một số hạn chế về thế hệ hàm đám mây mà bạn có thể sử dụng với một số loại điều kiện kích hoạt nhất định. Vì lý do này, nhiều tiện ích bao gồm cả các hàm thế hệ thứ nhất và thứ hai.

Hỗ trợ tạo hàm được ghi chú cho từng loại sự kiện kích hoạt bên dưới.

Các điểm cần cân nhắc đặc biệt

  • Một số định nghĩa hàm yêu cầu bạn chỉ định thông tin cũng được chỉ định trong tệp extension.yaml. Ví dụ: Cloud Firestore có một phương thức document() chỉ định mẫu tài liệu cần theo dõi và khai báo tương ứng của phương thức đó trong extension.yaml có một trường resource chỉ định mẫu tài liệu đó.

    Trong những trường hợp này, cấu hình được chỉ định trong tệp extension.yaml sẽ được dùng và cấu hình được chỉ định trong định nghĩa hàm sẽ bị bỏ qua.

    Thông thường, bạn nên chỉ định giá trị đã định cấu hình trong định nghĩa hàm, bất kể vì mục đích nào của tài liệu. Các ví dụ trên trang này tuân theo mẫu này.

  • SDK thế hệ thứ nhất Cloud Functions có phương thức functions.config() và lệnh CLI functions:config:set mà bạn có thể dùng để xử lý các giá trị được tham số hoá trong các hàm thế hệ thứ nhất. Kỹ thuật này không được dùng nữa trong Cloud Functionssẽ không hoạt động trong tiện ích. Thay vào đó, hãy sử dụng mô-đun functions.params (nên dùng) hoặc process.env.

Sử dụng TypeScript

Hầu hết tài liệu về cách phát triển tiện ích của riêng bạn đều mô tả quy trình công việc bằng JavaScript cho Cloud Functions for Firebase. Tuy nhiên, bạn có thể viết các hàm bằng TypeScript.

Trên thực tế, tất cả các tiện ích Firebasechính thức đều được viết bằng TypeScript. Bạn có thể xem xét những tiện ích đó để biết một số phương pháp hay nhất khi sử dụng TypeScript cho tiện ích của mình.

Nếu viết các hàm của tiện ích bằng TypeScript, bạn phải thực hiện những việc sau trước khi cài đặt tiện ích:

  1. Biên dịch mã nguồn hàm của tiện ích thành JavaScript.

    Lệnh firebase ext:dev:init cho phép bạn chọn TypeScript để viết các hàm. Lệnh này cung cấp cho bạn một tiện ích có thể cài đặt hoàn chỉnh cũng như một tập lệnh bản dựng mà bạn có thể chạy bằng npm run build.

  2. Trong tệp package.json, hãy nhớ trỏ trường main đến JavaScript đã tạo.

  3. Nếu bạn đang cài đặt hoặc tải tiện ích lên từ nguồn cục bộ, trước tiên hãy biên dịch các tệp TypeScript.

Trình kích hoạt hàm được hỗ trợ

Trình kích hoạt HTTP

Một hàm được kích hoạt bằng HTTP sẽ được triển khai đến một điểm cuối https công khai và chạy khi điểm cuối được truy cập.

Hãy xem phần Gọi hàm thông qua yêu cầu HTTP trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm được kích hoạt bằng HTTP.

Định nghĩa hàm (chỉ thế hệ thứ nhất)

import { https } from "firebase-functions/v1";

export const yourFunctionName = https.onRequest(async (req, resp) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      runtime: nodejs16
      httpsTrigger: {}
  - name: anotherFunction
    type: ...

Hàm có thể gọi

Hàm có thể gọi tương tự như hàm được kích hoạt bằng HTTP, nhưng chúng triển khai một giao thức giúp bạn dễ dàng gọi từ mã phía máy khách.

Hãy xem phần Gọi hàm từ ứng dụng của bạn trong tài liệu Cloud Functions để biết thông tin về cách sử dụng các hàm có thể gọi.

Định nghĩa hàm (chỉ thế hệ thứ nhất)

import { https } from "firebase-functions/v1";

export const yourFunctionName = https.onCall(async (data, context) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      runtime: nodejs16
      httpsTrigger: {}
  - name: anotherFunction
    type: ...

Trình kích hoạt hàm theo lịch

Hàm theo lịch chạy lặp lại dựa trên lịch biểu có thể tuỳ chỉnh.

Hãy xem phần Lập lịch cho các hàm trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm được lập lịch.

Định nghĩa hàm (chỉ thế hệ thứ nhất)

import { pubsub } from "firebase-functions/v1";

export const yourFunctionName = pubsub.schedule("every 6 hours").onRun((context) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      scheduleTrigger:
        schedule: 'every 5 minutes'
  - name: anotherFunction
    type: ...

Dưới đây là các trường con có sẵn cho scheduleTrigger:

Trường Nội dung mô tả
schedule
(bắt buộc)

Tần suất mà bạn muốn hàm chạy.

Trường này có thể chấp nhận các chuỗi sử dụng một trong hai cú pháp (bạn phải đặt trong dấu ngoặc đơn):

timeZone
(không bắt buộc)

Múi giờ mà lịch biểu sẽ chạy.

Nếu bạn muốn người dùng có thể định cấu hình lịch biểu khi họ cài đặt tiện ích, hãy thêm một tham số mới vào tệp extension.yaml và tham chiếu tham số đó trong phần khai báo resource của hàm:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      scheduleTrigger:
        schedule: ${SCHEDULE_FREQUENCY}
  - name: anotherFunction
    type: ...

params:
  - param: SCHEDULE_FREQUENCY
    label: Schedule
    description: How often do you want to run yourFunctionName()?
    type: string
    default: 'every 5 minutes'  # Specifying a default is optional.
    required: true

Trình kích hoạt hàng đợi tác vụ

Một hàm trong hàng đợi tác vụ sẽ được kích hoạt trên các sự kiện vòng đời của tiện ích hoặc khi được thêm vào hàng đợi tác vụ của tiện ích theo cách thủ công bằng phương thức TaskQueue.enqueue() của Admin SDK.

Hãy xem phần Xử lý các sự kiện trong vòng đời của tiện ích để biết thông tin về cách viết các hàm xử lý các sự kiện trong vòng đời.

Hãy xem phần Xếp hàng các hàm bằng Cloud Tasks trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm hàng đợi tác vụ.

Định nghĩa hàm (chỉ thế hệ thứ nhất)

import { tasks } from "firebase-functions/v1";

export const yourFunctionName = tasks.taskQueue().onDispatch(async (data, context) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

resources:
  - name: myTaskFunction
    type: firebaseextensions.v1beta.function
    description: >-
      Perform a task when triggered by a lifecycle event
    properties:
      taskQueueTrigger: {}

Đặt bộ thuộc tính taskQueueTrigger thành {} hoặc một bản đồ các lựa chọn giúp điều chỉnh giới hạn tốc độ và hành vi thử lại của hàng đợi tác vụ (xem phần Điều chỉnh hàng đợi tác vụ).

Nếu bạn muốn kích hoạt hàm trên các sự kiện vòng đời của tiện ích, hãy thêm các bản ghi lifecycleEvents có tên của hàm và thông báo xử lý không bắt buộc. Thông báo này sẽ xuất hiện trong bảng điều khiển Firebase khi quá trình xử lý bắt đầu.

lifecycleEvents:
  onInstall:
    function: myTaskFunction
    processingMessage: Resizing your existing images
  onUpdate:
    function: myOtherTaskFunction
    processingMessage: Setting up your extension
  onConfigure:
    function: myOtherTaskFunction
    processingMessage: Setting up your extension

Analytics

Một hàm do Analytics kích hoạt sẽ chạy khi một sự kiện Analytics được chỉ định được ghi lại.

Hãy xem các điều kiện kích hoạt Google Analytics trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm do Analytics kích hoạt.

Định nghĩa hàm (chỉ thế hệ thứ nhất)

import { analytics } from "firebase-functions/v1";

export const yourFunctionName = analytics.event("event_name").onLog((event, context) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.analytics/eventTypes/event.log
        resource: projects/${PROJECT_ID}/events/ga_event
  - name: anotherFunction
    type: ...

Nếu bạn muốn người dùng có thể định cấu hình sự kiện Analytics để theo dõi khi họ cài đặt tiện ích, hãy thêm một tham số mới vào tệp extension.yaml và tham chiếu tham số đó trong khai báo resource của hàm:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.analytics/eventTypes/event.log
        resource: projects/${PROJECT_ID}/events/${EVENT_NAME}
  - name: anotherFunction
    type: ...

params:
  - param: EVENT_NAME
    label: Analytics event
    description: What event do you want to respond to?
    type: string
    default: ga_event  # Specifying a default is optional.
    required: true

Authentication

Một hàm do quá trình xác thực kích hoạt sẽ chạy khi người dùng được tạo hoặc bị xoá.

Hãy xem phần Triggers của Firebase Authentication trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm được kích hoạt bằng tính năng xác thực.

Định nghĩa hàm (chỉ thế hệ thứ nhất)

import { auth } from "firebase-functions/v1";

export const yourFunctionName = auth.user().onCreate((user, context) => {
  // ...
});

export const yourFunctionName2 = auth.user().onDelete((user, context) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/firebase.auth/eventTypes/user.create
        resource: projects/${PROJECT_ID}
  - name: anotherFunction
    type: ...

Bảng sau đây cho biết cách chỉ định từng loại sự kiện Authentication được hỗ trợ:

Cloud Functions trình kích hoạt sự kiện eventType Mô tả
onCreate() providers/firebase.auth/eventTypes/user.create Đã tạo người dùng mới
onDelete() providers/firebase.auth/eventTypes/user.delete Người dùng đã bị xoá

Cloud Firestore

Một hàm được kích hoạt bởi Cloud Firestore sẽ chạy khi một tài liệu được tạo, cập nhật hoặc xoá.

Hãy xem các điều kiện kích hoạt Cloud Firestore trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm do Firestore kích hoạt.

Định nghĩa hàm (chỉ thế hệ thứ nhất)

import { firestore } from "firebase-functions/v1";

export const yourFunctionName = firestore.document("collection/{doc_id}")
  .onCreate((snapshot, context) => {
    // ...
  });

export const yourFunctionName2 = firestore.document("collection/{doc_id}")
  .onUpdate((change, context) => {
    // ...
  });

export const yourFunctionName3 = firestore.document("collection/{doc_id}")
  .onDelete((snapshot, context) => {
    // ...
  });

export const yourFunctionName4 = firestore.document("collection/{doc_id}")
  .onWrite((change, context) => {
    // onWrite triggers on creation, update, and deletion.
    // ...
  });

Khai báo tài nguyên (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/collection/{documentID}
  - name: anotherFunction
    type: ...

Bảng sau đây cho biết cách chỉ định từng loại sự kiện Cloud Firestore được hỗ trợ:

Cloud Functions trình kích hoạt sự kiện eventType Mô tả
onCreate() providers/cloud.firestore/eventTypes/document.create Đã tạo tài liệu mới
onDelete() providers/cloud.firestore/eventTypes/document.delete Đã xoá tài liệu
onUpdate() providers/cloud.firestore/eventTypes/document.update Đã cập nhật tài liệu
onWrite() providers/cloud.firestore/eventTypes/document.write Tài liệu đã được tạo, xoá hoặc cập nhật

Nếu bạn muốn người dùng có thể định cấu hình đường dẫn tài liệu khi họ cài đặt tiện ích của bạn, hãy thêm một tham số mới vào tệp extension.yaml và tham chiếu tham số đó trong khai báo resource của hàm:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/${YOUR_DOCUMENT_PATH}
  - name: anotherFunction
    type: ...

params:
  - param: YOUR_DOCUMENT_PATH
    label: Cloud Firestore path
    description: Where do you want to watch for changes?
    type: string
    default: path/to/{documentID}  # Specifying a default is optional.
    required: true

Pub/Sub

Hàm được kích hoạt bằng Pub/Sub sẽ chạy khi một thông báo được xuất bản đến một chủ đề cụ thể.

Hãy xem Trình kích hoạt Pub/Sub trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm được kích hoạt bằng Pub/Sub.

Định nghĩa hàm (chỉ thế hệ thứ nhất)

import { pubsub } from "firebase-functions/v1";

export const yourFunctionName = pubsub.topic("topic_name").onPublish((message, context) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.pubsub.topic.publish
        resource: projects/${PROJECT_ID}/topics/topic-name
  - name: anotherFunction
    type: ...

Nếu bạn muốn người dùng có thể định cấu hình chủ đề Pub/Sub khi họ cài đặt tiện ích, hãy thêm một tham số mới vào tệp extension.yaml và tham chiếu tham số đó trong phần khai báo resource của hàm:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.pubsub.topic.publish
        resource: projects/${PROJECT_ID}/topics/${PUBSUB_TOPIC}
  - name: anotherFunction
    type: ...

params:
  - param: PUBSUB_TOPIC
    label: Pub/Sub topic
    description: Which Pub/Sub topic do you want to watch for messages?
    type: string
    default: topic-name  # Specifying a default is optional.
    required: true

Realtime Database

Hàm được kích hoạt bằng Realtime Database sẽ chạy khi một đường dẫn khớp với mẫu đã chỉ định được tạo, cập nhật hoặc xoá.

Hãy xem phần Trình kích hoạt Realtime Database trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm được kích hoạt bằng RTDB.

Định nghĩa hàm (chỉ thế hệ thứ nhất)

import { database } from "firebase-functions/v1";

export const yourFunctionName = database.ref("path/to/{item}")
  .onCreate((snapshot, context) => {
    // ...
  });

export const yourFunctionName2 = database.ref("path/to/{item}")
  .onUpdate((change, context) => {
    // ...
  });

export const yourFunctionName3 = database.ref("path/to/{item}")
  .onDelete((snapshot, context) => {
    // ...
  });

export const yourFunctionName4 = database.ref("path/to/{item}")
  .onWrite((change, context) => {
    // onWrite triggers on creation, update, and deletion.
    // ...
  });

Khai báo tài nguyên (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.database/eventTypes/ref.create
        # DATABASE_INSTANCE (project's default instance) is an auto-populated
        # parameter value. You can also specify an instance.
        resource: projects/_/instances/${DATABASE_INSTANCE}/refs/path/to/{itemId}
  - name: anotherFunction
    type: ...

Bảng sau đây cho biết cách chỉ định từng loại sự kiện Cloud Firestore được hỗ trợ:

Cloud Functions trình kích hoạt sự kiện eventType Mô tả
onCreate() providers/google.firebase.database/eventTypes/ref.create Dữ liệu đã tạo
onDelete() providers/google.firebase.database/eventTypes/ref.delete Đã xoá dữ liệu
onUpdate() providers/google.firebase.database/eventTypes/ref.update Đã cập nhật dữ liệu
onWrite() providers/google.firebase.database/eventTypes/ref.write Dữ liệu được tạo, xoá hoặc cập nhật

Nếu bạn muốn người dùng có thể định cấu hình đường dẫn để xem khi họ cài đặt tiện ích, hãy thêm một tham số mới vào tệp extension.yaml và tham chiếu tham số đó trong phần khai báo resource của hàm:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.database/eventTypes/ref.create
        # DATABASE_INSTANCE (project's default instance) is an auto-populated
        # parameter value. You can also specify an instance.
        resource: projects/_/instances/${DATABASE_INSTANCE}/refs/${DB_PATH}
  - name: anotherFunction
    type: ...

params:
  - param: DB_PATH
    label: Realtime Database path
    description: Where do you want to watch for changes?
    type: string
    default: path/to/{itemId}  # Specifying a default is optional.
    required: true

Remote Config

Một hàm do Cấu hình từ xa kích hoạt sẽ chạy khi mẫu tham số của một dự án được cập nhật.

Hãy xem Trình kích hoạt Cấu hình từ xa trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm do Cấu hình từ xa kích hoạt.

Định nghĩa hàm (chỉ thế hệ thứ nhất)

import { remoteConfig } from "firebase-functions/v1";

export const yourFunctionName = remoteConfig.onUpdate((version, context) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.firebase.remoteconfig.update
        resource: projects/${PROJECT_ID}
  - name: anotherFunction
    type: ...

Cloud Storage

Một hàm do Cloud Storage kích hoạt sẽ chạy khi một đối tượng được tạo, lưu trữ hoặc xoá, hoặc khi siêu dữ liệu của đối tượng đó thay đổi.

Hãy xem Trình kích hoạt Cloud Storage trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm do Storage kích hoạt.

Định nghĩa hàm (chỉ thế hệ thứ nhất)

import { storage } from "firebase-functions/v1";

export const yourFunctionName = storage.object().onFinalize((object, context) => {
  // ...
});

export const yourFunctionName2 = storage.object().onMetadataUpdate((object, context) => {
  // ...
});

export const yourFunctionName3 = storage.object().onArchive((object, context) => {
  // ...
});

export const yourFunctionName4 = storage.object().onDelete((object, context) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.storage.object.finalize
        # STORAGE_BUCKET (project's default bucket) is an auto-populated
        # parameter. You can also specify a bucket.
        resource: projects/_/buckets/${STORAGE_BUCKET}
  - name: anotherFunction
    type: ...

Bảng sau đây cho biết cách chỉ định từng loại sự kiện Cloud Storage được hỗ trợ:

Cloud Functions trình kích hoạt sự kiện eventType Mô tả
onFinalize() google.storage.object.finalize Đã tạo đối tượng
onMetadataUpdate() google.storage.object.metadataUpdate Đã cập nhật siêu dữ liệu của đối tượng
onArchive() google.storage.object.archive Đối tượng đã được lưu trữ
onDelete() google.storage.object.delete Đối tượng đã bị xoá

Nếu bạn muốn người dùng có thể định cấu hình nhóm lưu trữ khi họ cài đặt tiện ích của bạn, hãy thêm một tham số mới vào tệp extension.yaml và tham chiếu tham số đó trong phần khai báo resource của hàm:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.storage.object.finalize
        resource: projects/_/buckets/${YOUR_BUCKET}
  - name: anotherFunction
    type: ...

params:
  - param: YOUR_BUCKET
    label: Cloud Storage bucket
    description: Which bucket do you want to watch for changes?
    type: selectResource
    resourceType: storage.googleapis.com/Bucket
    default: ${STORAGE_BUCKET}  # Specifying a default is optional.
    required: true

Test Lab

Một hàm do Phòng thử nghiệm kích hoạt sẽ chạy khi ma trận kiểm thử hoàn tất các quy trình kiểm thử.

Hãy xem các điều kiện kích hoạt Phòng thử nghiệm Firebase trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm do Phòng thử nghiệm kích hoạt.

Định nghĩa hàm (chỉ thế hệ thứ nhất)

import { testLab } from "firebase-functions/v1";

export const yourFunctionName = testLab.testMatrix().onComplete((matrix, context) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.testing.testMatrix.complete
        resource: projects/${PROJECT_ID}/testMatrices/{matrixId}
  - name: anotherFunction
    type: ...

Crashlytics điều kiện kích hoạt cảnh báo

Hàm được kích hoạt bằng Crashlytics sẽ chạy khi Crashlytics xuất bản một cảnh báo.

Hãy xem Các điều kiện kích hoạt Cảnh báo của Firebase trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm được kích hoạt bằng cảnh báo.

Định nghĩa hàm (chỉ dành cho thế hệ thứ 2)

import {
  onNewFatalIssuePublished,
  onNewNonfatalIssuePublished,
  onNewAnrIssuePublished,
  onRegressionAlertPublished,
  onVelocityAlertPublished,
  onStabilityDigestPublished,
} from "firebase-functions/v2/alerts/crashlytics";

export const yourFunctionName = onNewFatalIssuePublished((event) => {
  // ...
});

export const yourFunctionName2 = onNewNonfatalIssuePublished((event) => {
  // ...
});

export const yourFunctionName3 = onNewAnrIssuePublished((event) => {
  // ...
});

export const yourFunctionName4 = onRegressionAlertPublished((event) => {
  // ...
});

export const yourFunctionName5 = onVelocityAlertPublished((event) => {
  // ...
});

export const yourFunctionName6 = onStabilityDigestPublished((event) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

apis:
  - apiName: eventarc.googleapis.com
    reason: Powers all events and triggers
  - apiName: run.googleapis.com
    reason: Powers 2nd-gen functions

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: crashlytics.newFatalIssue
  - name: anotherFunction
    type: ...

Bạn có thể sử dụng các giá trị sau cho alerttype

  • crashlytics.newFatalIssue
  • crashlytics.newNonfatalIssue
  • crashlytics.regression
  • crashlytics.stabilityDigest
  • crashlytics.velocity
  • crashlytics.newAnrIssue

Performance Monitoring điều kiện kích hoạt cảnh báo

Hàm được kích hoạt bằng Performance Monitoring sẽ chạy khi Performance Monitoring xuất bản một cảnh báo.

Hãy xem Các điều kiện kích hoạt Cảnh báo của Firebase trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm được kích hoạt bằng cảnh báo.

Định nghĩa hàm (chỉ dành cho thế hệ thứ 2)

import { onThresholdAlertPublished } from "firebase-functions/v2/alerts/performance";

export const yourFunctionName = onThresholdAlertPublished((event) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

apis:
  - apiName: eventarc.googleapis.com
    reason: Powers all events and triggers
  - apiName: run.googleapis.com
    reason: Powers 2nd-gen functions

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: performance.threshold
  - name: anotherFunction
    type: ...

App Distribution điều kiện kích hoạt cảnh báo

Hàm được kích hoạt bằng App Distribution sẽ chạy khi App Distribution xuất bản một cảnh báo.

Hãy xem Các điều kiện kích hoạt Cảnh báo của Firebase trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm được kích hoạt bằng cảnh báo.

Định nghĩa hàm (chỉ dành cho thế hệ thứ 2)

import {
  onNewTesterIosDevicePublished,
  onInAppFeedbackPublished
} from "firebase-functions/v2/alerts/appDistribution";

export const yourFunctionName = onNewTesterIosDevicePublished((event) => {
  // ...
});

export const yourFunctionName2 = onInAppFeedbackPublished((event) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

apis:
  - apiName: eventarc.googleapis.com
    reason: Powers all events and triggers
  - apiName: run.googleapis.com
    reason: Powers 2nd-gen functions

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: appDistribution.inAppFeedback
  - name: anotherFunction
    type: ...

Bạn có thể sử dụng các giá trị sau cho alerttype

  • appDistribution.newTesterIosDevice
  • appDistribution.inAppFeedback

Điều kiện kích hoạt sự kiện tuỳ chỉnh (Eventarc)

Một hàm được kích hoạt bởi Eventarc sẽ chạy khi một loại sự kiện cụ thể được xuất bản đến một kênh cụ thể.

Hãy xem bài viết Tạo và xử lý các trình kích hoạt sự kiện tuỳ chỉnh trong tài liệu Cloud Functions để biết thông tin về cách viết các hàm được kích hoạt bằng Eventarc.

Bạn cũng có thể xuất bản các sự kiện từ tiện ích để cho phép người dùng chèn logic tuỳ chỉnh vào tiện ích của bạn. Hãy xem phần Sử dụng logic tuỳ chỉnh do nhà phát triển cung cấp trong một tiện ích.

Định nghĩa hàm (chỉ dành cho thế hệ thứ 2)

import { onCustomEventPublished } from "firebase-functions/v2/eventarc";

export const yourFunctionName = onCustomEventPublished((event) => {
  // ...
});

Khai báo tài nguyên (extension.yaml)

apis:
  - apiName: eventarc.googleapis.com
    reason: Powers all events and triggers
  - apiName: run.googleapis.com
    reason: Powers 2nd-gen functions

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      # LOCATION is a user-configured parameter value specified by the user
      # during installation.
      location: ${param:LOCATION}
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
        timeoutSeconds: 60
      eventTrigger:
        eventType: firebase.extensions.storage-resize-images.v1.complete
        channel: projects/${param:PROJECT_ID}/locations/us-central1/channels/firebase
  - name: anotherFunction
    type: ...

Kênh phải đã tồn tại khi tiện ích được cài đặt. Ví dụ: nếu bạn phụ thuộc vào các sự kiện tuỳ chỉnh từ một tiện ích khác tạo kênh, hãy hướng dẫn người dùng cài đặt tiện ích đó trước.

Ví dụ trên sẽ tạo một trình kích hoạt sự kiện tuỳ chỉnh cho kênh Firebase "mặc định" ở khu vực us-central1. Bạn có thể tuỳ chỉnh tên và khu vực của kênh bằng cách sử dụng các tham số. Ví dụ:


params:
  - param: EVENTARC_CHANNEL_NAME
    label: Eventarc channel name
    description: What is the name of the Eventarc channel.
    default: firebase
    type: string
    required: true

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      location: ${param:LOCATION}
      eventTrigger:
        eventType: firebase.extensions.storage-resize-images.v1.complete
        channel: projects/${param:PROJECT_ID}/locations/${param:LOCATION}/channels/${param:EVENTARC_CHANNEL_NAME}