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 Cloud Functions, tương tự như cách bạn viết một hàm chỉ được sử dụng trong dự án của riêng mình. 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.

Cloud Functions thế hệ 1 và 2

Firebase hỗ trợ cả Cloud Functions thế hệ 1 và thế hệ 2. Tuy nhiên, Tiện ích Firebase hiện có một số hạn chế về thế hệ hàm trên đám mây mà bạn có thể sử dụng với một số loại trình 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ệ 1 và 2.

Dưới đây là thông tin hỗ trợ tạo hàm cho từng loại trình kích hoạt.

Những đ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à nội dung khai báo tương ứng của phương thức này trong extension.yaml có trường resource chỉ định cùng một mẫu.

    Trong những trường hợp này, cấu hình được chỉ định trong tệp extension.yaml sẽ được sử dụng và cấu hình được chỉ định trong phần khai báo hàm sẽ bị bỏ qua.

    Để tài liệu được đầy đủ, bạn nên chỉ định giá trị đã định cấu hình trong phần khai báo hàm. Các ví dụ trên trang này tuân theo mẫu này.

  • SDK Cloud Functions thế hệ 1 có một phương thức functions.config() và lệnh CLI functions:config:set mà bạn có thể sử dụng để xử lý các giá trị được tạo thông số trong các hàm thế hệ 1. Kỹ thuật này không còn được dùng trong Cloud Functions và sẽ không hoạt động chút nào trong một 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 sử dụ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ả tiện ích Firebase chính thức đều được viết bằng TypeScript. Bạn có thể xem xét các tiện ích đó để biết một số phương pháp hay nhất để 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 trong TypeScript, bạn phải làm như 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 hàm. Lệnh này cung cấp cho bạn một tiện ích hoàn chỉnh, có thể cài đặt 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

Hàm được kích hoạt bằng HTTP đượ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 về Cloud Functions để biết thông tin về cách viết hàm được kích hoạt bằng HTTP.

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

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

Hãy xem phần Gọi hàm từ ứng dụng trong tài liệu về 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ỉ dành cho thế hệ 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: ...

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

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

Xem phần Lên lịch hàm trong tài liệu về Cloud Functions để biết thông tin về cách viết hàm được lên lịch.

Định nghĩa hàm (chỉ dành cho thế hệ 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 con hiện có cho scheduleTrigger:

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

Tần suất 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ắt buộc phải gói 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ụ

Hàm hàng đợi tác vụ đượ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 SDK Quản trị.

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 Đưa hàm vào hàng đợi bằng Cloud Tasks trong tài liệu về 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ệ 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 để đ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 trong vòng đời của tiện ích, hãy thêm 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

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.

Xem phần Trình kích hoạt Google Analytics 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 bằng Analytics.

Định nghĩa hàm (chỉ dành cho thế hệ 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ể định cấu hình sự kiện Analytics để nghe 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.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

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

Hãy xem phần Trình kích hoạt Xác thực Firebase 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 bằng xác thực.

Định nghĩa hàm (chỉ dành cho thế hệ 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 cho biết cách chỉ định từng loại sự kiện Authentication được hỗ trợ:

Trình kích hoạt sự kiện Cloud Functions eventType Nội dung 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

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

Xem phần Trình kích hoạt Cloud Firestore 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 bằng Firestore.

Định nghĩa hàm (chỉ dành cho thế hệ 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 cho biết cách chỉ định từng loại sự kiện Cloud Firestore được hỗ trợ:

Trình kích hoạt sự kiện Cloud Functions eventType Nội dung 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, 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

Hàm được kích hoạt bằng Pub/Sub sẽ chạy khi một thông báo được phát hành cho một chủ đề cụ thể.

Hãy xem phần Trình kích hoạt Pub/Sub 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 bằng Pub/Sub.

Định nghĩa hàm (chỉ dành cho thế hệ 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, 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 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ẫu được chỉ định được tạo, cập nhật hoặc xoá.

Xem phần Trình kích hoạt Cơ sở dữ liệu theo thời gian thực 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 bằng RTDB.

Định nghĩa hàm (chỉ dành cho thế hệ 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 cho biết cách chỉ định từng loại sự kiện Cloud Firestore được hỗ trợ:

Trình kích hoạt sự kiện Cloud Functions eventType Nội dung 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 đã 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

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

Hãy xem phần Trình kích hoạt Cấu hình từ xa 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 bằng Cấu hình từ xa.

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

Hàm được kích hoạt bằng Cloud Storage 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 phần Trình 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 bằng Cloud Storage.

Định nghĩa hàm (chỉ dành cho thế hệ 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 cho biết cách chỉ định từng loại sự kiện Cloud Storage được hỗ trợ:

Trình kích hoạt sự kiện Cloud Functions eventType Nội dung 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 bộ nhớ 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.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

Hàm được kích hoạt bằng Phòng kiểm thử sẽ chạy khi một ma trận kiểm thử hoàn tất các kiểm thử của nó.

Hãy xem phần Trình 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 được kích hoạt bằng Phòng thử nghiệm.

Định nghĩa hàm (chỉ dành cho thế hệ 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 Crashlytics

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

Xem phần Trình kích hoạt cảnh báo Firebase 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 bằng cảnh báo.

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

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

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

Xem phần Trình kích hoạt cảnh báo Firebase 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 bằng cảnh báo.

Định nghĩa hàm (chỉ dành cho thế hệ 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 App Distribution

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

Xem phần Trình kích hoạt cảnh báo Firebase 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 bằng cảnh báo.

Định nghĩa hàm (chỉ dành cho thế hệ 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 tuỳ chỉnh (Eventarc)

Hàm được kích hoạt bằng Eventarc sẽ chạy khi một loại sự kiện cụ thể được phát hành cho một kênh cụ thể.

Hãy xem phần Tạo và xử lý trình kích hoạt sự kiện tuỳ chỉnh 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 bằng Eventarc.

Bạn cũng có thể phát hành các sự kiện từ tiện ích để cung cấp cho người dùng cách chèn logic tuỳ chỉnh vào tiện ích. 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ệ 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 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 kênh và khu vực bằng cách sử dụng các thông 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}