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 Hàm đám mây, trong giống như cách bạn viết một hàm chỉ dùng được 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ủa bạn, các chức năng này sẽ được triển khai dự án.

Xem tài liệu về Chức năng đám mây để biết thông tin chung về cách sử dụng Chức năng đám mây.

Hàm đám mây thế hệ 1 và 2

Firebase hỗ trợ cả Chức năng đám mây thế hệ 1 và thế hệ 2. Tuy nhiên, Firebase Các tiện ích hiện có một số hạn chế về việc tạo đám mây nào 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 kết hợp các hàm thế hệ 1 và 2.

Bên dưới là ghi chú về chức năng hỗ trợ tạo hàm cho từng loại điều kiện kích hoạt.

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

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

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

    Thông thường, bạn cần chỉ định giá trị được định cấu hình trong hàm định nghĩa nhằm mục đích ghi nhận tài liệu. Ví dụ về nội dung này trang tuân theo mẫu sau.

  • SDK Cloud Functions thế hệ thứ 1 có một 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ố trong hàm thế hệ 1. Kỹ thuật này không được dùng nữa trong Cloud Functions và sẽ không hoạt động trong tiện ích. Thay vào đó, hãy sử dụng mô-đun functions.params (khuyến nghị) hoặc process.env.

Sử dụng TypeScript

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

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

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

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

    firebase ext:dev:init Command cho phép bạn chọn TypeScript để viết các hàm. Lệnh cung cấp cho bạn tiện ích mở rộng hoàn chỉnh, có thể cài đặt cũng như một 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 vào 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ộ, biên dịch tệp TypeScript của bạn trước.

Điều kiện kích hoạt hàm được hỗ trợ

Điều kiện kích hoạt HTTP

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

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

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

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

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

Xem phần Gọi hàm từ ứng dụng của bạn trong tài liệu về Chức năng đám mây để 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ỉ dành cho thế hệ thứ 1)

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: ...

Điều kiện kích hoạt hàm được lên lịch

Một hàm được lên lịch chạy nhiều lần dựa trên lịch biểu có thể tuỳ chỉnh.

Xem phần Hàm lên lịch trong tài liệu về Hàm đám mây dành cho thông tin về cách viết hàm có lịch biểu.

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

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 phụ 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 này 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 (gói trong dấu ngoặc đơn là bắt buộc):

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 khi họ cài đặt hãy thêm một tham số mới vào tệp extension.yaml và tham chiếu đến 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ụ

Chức năng hàng đợi công việc được kích hoạt trên vòng đời của tiện ích sự kiện 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 bảng điều khiển Quản trị Phương thức TaskQueue.enqueue() của SDK.

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

Xem phần Xếp hàng các hàm với Cloud Tasks trong Cloud Functions để biết thông tin về cách viết hàm hàng đợi tác vụ.

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

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 thuộc tính taskQueueTrigger thành {} hoặc bản đồ các tuỳ chọn tinh chỉnh giới hạn số lượng yêu cầu và thử lại hành vi của hàng đợi tác vụ (xem Điều chỉnh tác vụ hàng đợi).

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

Hàm do Analytics kích hoạt sẽ chạy khi một sự kiện Analytics được chỉ định được đã ghi nhật ký.

Xem các điều kiện kích hoạt Google Analytics trong tài liệu về Hàm đám mây để biết thông tin về cách viết hàm được Analytics kích hoạt.

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

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ể thiết lập sự kiện Analytics để theo dõi khi họ cài đặt tiện ích của bạn, hãy thêm một tham số mới vào extension.yaml rồi tham chiếu đến 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.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

Xác thực

Hàm được kích hoạt xác thực sẽ chạy khi người dùng được tạo hoặc bị xoá.

Xem trình kích hoạt Xác thực Firebase trong Cloud Functions để biết thông tin về cách viết hàm được kích hoạt xác thực.

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

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 trình bày cách chỉ định từng sự kiện Xác thực được hỗ trợ loại:

Trình kích hoạt sự kiện Cloud Functions 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 Đã xoá người dùng

Cloud Firestore

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

Xem các trình kích hoạt Cloud Firestore trong tài liệu về Hàm đám mây để biết thông tin về cách viết hàm được kích hoạt bởi Firestore.

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

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 trình bày cách chỉ định từng Cloud Firestore được hỗ trợ loại sự kiện:

Trình kích hoạt sự kiện Cloud Functions eventType Mô tả
onCreate() providers/cloud.firestore/eventTypes/document.create Đã tạo được 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ạo, xoá hoặc cập nhật tài liệu

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 phần 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

Một hàm được kích hoạt Pub/Sub sẽ chạy khi một thông báo được đăng lên một ứng dụng cụ thể chủ đề.

Xem Điều kiện kích hoạt Pub/Sub trong tài liệu về Hàm đám mây để biết thông tin về cách viết hàm được kích hoạt Pub/Sub.

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

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 của bạn, hãy thêm một tham số mới vào tệp extension.yaml và tham chiếu đến 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

Cơ sở dữ liệu theo thời gian thực

Hàm được kích hoạt bởi Cơ sở dữ liệu theo thời gian thực sẽ chạy khi một đường dẫn khớp với một đường dẫn đã chỉ định mẫu được tạo, cập nhật hoặc xoá.

Xem Điều kiện kích hoạt Cơ sở dữ liệu theo thời gian thực trong tài liệu về Hàm đám mây để biết thông tin về cách viết các hàm được kích hoạt RTDB.

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

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 trình bày cách chỉ định từng Cloud Firestore được hỗ trợ loại sự kiện:

Trình kích hoạt sự kiện Cloud Functions eventType Mô tả
onCreate() providers/google.firebase.database/eventTypes/ref.create Đã tạo dữ liệu
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 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: 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

Cấu hình từ xa

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

Xem điều kiện kích hoạt Cấu hình từ xa trong tài liệu về Hàm đám mây để biết thông tin về cách viết các hàm được kích hoạt Cấu hình từ xa.

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

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 bị xoá hoặc khi siêu dữ liệu của siêu dữ liệu thay đổi.

Xem các điều kiện kích hoạt Cloud Storage trong tài liệu về Cloud Functions để biết thông tin về cách viết các hàm được kích hoạt qua bộ nhớ.

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

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 trình bày cách chỉ định từng Cloud Storage được hỗ trợ loại sự kiện:

Trình kích hoạt sự kiện Cloud Functions 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 đối tượng
onArchive() google.storage.object.archive Đã lưu trữ đối tượng
onDelete() google.storage.object.delete Đã xoá đối tượng

Nếu bạn muốn người dùng có thể định cấu hình bộ chứa 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

Phòng thử nghiệm

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 lượt kiểm thử đó.

Xem các trình kích hoạt trong Phòng thử nghiệm Firebase trong tài liệu về Chức năng đám mây để biết thông tin về cách viết các hàm được kích hoạt trong Phòng thử nghiệm.

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

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: ...

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

Một hàm được Crashlytics kích hoạt sẽ chạy khi Crashlytics phát hành một cảnh báo.

Xem điều kiện kích hoạt Cảnh báo Firebase trong tài liệu về Hàm đám mây dành cho thông tin về cách viết các hàm được kích hoạt cảnh báo.

Định nghĩa hàm (chỉ 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

Đã kích hoạt cảnh báo của việc Giám sát hiệu suất

Một hàm được kích hoạt của chức năng Giám sát hiệu suất sẽ chạy khi tính năng Giám sát hiệu suất xuất bản một cảnh báo.

Xem điều kiện kích hoạt Cảnh báo Firebase trong tài liệu về Hàm đám mây dành cho thông tin về cách viết các hàm được kích hoạt cảnh báo.

Định nghĩa hàm (chỉ 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: ...

Điều kiện kích hoạt cảnh báo Phân phối ứng dụng

Một hàm được kích hoạt bởi tính năng Phân phối ứng dụng sẽ chạy khi tính năng Phân phối ứng dụng phát hành một cảnh báo.

Xem điều kiện kích hoạt Cảnh báo Firebase trong tài liệu về Hàm đám mây dành cho thông tin về cách viết các hàm được kích hoạt cảnh báo.

Định nghĩa hàm (chỉ 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

Trình kích hoạt sự kiện tùy chỉnh (Eventarc)

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

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

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

Định nghĩa hàm (chỉ 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 bạn cài đặt tiện ích. Ví dụ: nếu bạn phụ thuộc vào sự kiện tùy chỉnh từ một tiện ích khác tạo kênh, 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 tùy chỉnh cho thuộc tính "mặc định" Firebase ở us-central1 khu vực. Bạn có thể đặt tên kênh và khu vực có thể tuỳ chỉ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}