Menulis Cloud Functions untuk ekstensi

Saat membuat ekstensi, tulis logikanya menggunakan Cloud Functions, sama seperti Anda menulis fungsi yang hanya akan digunakan di project Anda sendiri. Anda mendeklarasikan fungsi di file extension.yaml, dan saat pengguna menginstal ekstensi Anda, fungsi tersebut akan di-deploy ke project mereka.

Lihat dokumentasi Cloud Functions untuk mengetahui informasi umum terkait penggunaan Cloud Functions.

Cloud Functions generasi ke-1 dan ke-2

Firebase mendukung keduanya Cloud Functions generasi ke-1 dan ke-2. Namun, Firebase Extensions saat ini memiliki beberapa batasan terkait generasi cloud function mana yang dapat Anda gunakan dengan jenis pemicu tertentu. Karena alasan ini, banyak ekstensi menyertakan campuran fungsi dari generasi ke-1 dan ke-2.

Dukungan untuk generasi fungsi dicatat untuk setiap jenis pemicu, di bawah ini.

Pertimbangan khusus

  • Beberapa definisi fungsi mengharuskan Anda menentukan informasi yang juga ditentukan di dalam file extension.yaml. Misalnya, Cloud Firestore memiliki metode document() yang menentukan pola dokumen yang akan diamati, dan deklarasi terkaitnya di extension.yaml memiliki kolom resource yang menentukan pola dokumen yang sama.

    Dalam situasi ini, konfigurasi yang ditentukan dalam file extension.yaml digunakan dan konfigurasi yang ditentukan dalam definisi fungsi diabaikan.

    Bagaimanapun juga, menentukan nilai yang dikonfigurasi dalam definisi fungsi merupakan hal yang umum dilakukan, demi dokumentasi. Contoh di halaman ini mengikuti pola ini.

  • Cloud Functions SDK generasi ke-1 memiliki metode functions.config() dan perintah CLI functions:config:set yang dapat Anda gunakan untuk bekerja dengan nilai-nilai berparameter dalam fungsi generasi ke-1. Teknik ini tidak digunakan lagi di Cloud Functions dan tidak akan berfungsi sama sekali di ekstensi. Sebagai gantinya, gunakan modul functions.params (direkomendasikan) atau process.env.

Menggunakan TypeScript

Sebagian besar dokumentasi untuk mengembangkan ekstensi Anda sendiri menjelaskan alur kerja penggunaan JavaScript untuk Cloud Functions for Firebase. Namun, Anda dapat menulis fungsi menggunakan TypeScript.

Bahkan, semua ekstensi Firebase resmi ditulis dalam TypeScript. Anda dapat meninjau ekstensi tersebut untuk mengetahui beberapa praktik terbaik penggunaan TypeScript untuk ekstensi Anda.

Jika fungsi ekstensi Anda ditulis di TypeScript, Anda harus melakukan hal berikut sebelum menginstal ekstensi:

  1. Kompilasi kode sumber fungsi ekstensi Anda ke JavaScript.

    Perintah firebase ext:dev:init memungkinkan Anda memilih TypeScript untuk menulis fungsi. Perintah ini menyediakan ekstensi lengkap dan dapat diinstal serta skrip build yang dapat dijalankan dengan npm run build.

  2. Di file package.json Anda, pastikan untuk menunjuk kolom main di JavaScript yang dihasilkan.

  3. Jika Anda menginstal atau mengupload ekstensi dari sumber lokal, kompilasi file TypeScript terlebih dahulu.

Pemicu fungsi yang didukung

Pemicu HTTP

Fungsi yang dipicu HTTP di-deploy ke endpoint https publik dan dijalankan saat endpoint diakses.

Baca artikel Memanggil fungsi melalui permintaan HTTP dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang cara menulis fungsi yang dipicu HTTP.

Definisi fungsi (khusus generasi ke-1)

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

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

Deklarasi resource (extension.yaml)

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

Fungsi callable

Fungsi callable mirip dengan fungsi yang dipicu HTTP, tetapi menerapkan protokol yang membuatnya mudah untuk dipanggil dari kode sisi klien Anda.

Baca artikel Memanggil fungsi dari aplikasi dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penggunaan fungsi callable.

Definisi fungsi (khusus generasi ke-1)

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

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

Deklarasi resource (extension.yaml)

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

Pemicu fungsi terjadwal

Fungsi terjadwal dijalankan berulang kali berdasarkan jadwal yang dapat disesuaikan.

Baca artikel Menjadwalkan fungsi dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi terjadwal.

Definisi fungsi (khusus generasi ke-1)

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

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

Deklarasi resource (extension.yaml)

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

Berikut adalah subkolom yang tersedia untuk scheduleTrigger:

Kolom Deskripsi
schedule
(wajib)

Frekuensi eksekusi fungsi yang diinginkan.

Kolom ini dapat menerima string yang menggunakan salah satu sintaksis berikut (harus diapit dengan tanda kutip tunggal):

timeZone
(opsional)

Zona waktu tempat jadwal akan dijalankan.

Jika Anda ingin pengguna dapat mengonfigurasi jadwal saat menginstal ekstensi, tambahkan parameter baru ke file extension.yaml dan rujuk parameter dalam deklarasi resource fungsi Anda:

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

Pemicu task queue

Fungsi task queue dipicu pada peristiwa siklus proses ekstensi Anda atau saat ditambahkan secara manual ke task queue ekstensi menggunakan metode TaskQueue.enqueue() Admin SDK.

Baca artikel Menangani peristiwa siklus proses ekstensi untuk mengetahui informasi tentang penulisan fungsi yang menangani peristiwa siklus proses.

Baca artikel Mengantrekan fungsi dengan Cloud Tasks dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi task queue.

Definisi fungsi (khusus generasi ke-1)

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

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

Deklarasi resource (extension.yaml)

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

Tetapkan properti taskQueueTrigger ke {} atau peta opsi yang menyesuaikan batas kapasitas dan perilaku percobaan ulang task queue (baca artikel Menyesuaikan task queue).

Jika Anda ingin memicu fungsi pada peristiwa siklus proses ekstensi, tambahkan data lifecycleEvents dengan nama fungsi dan pesan pemrosesan opsional, yang akan ditampilkan di Firebase console saat pemrosesan dimulai.

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

Fungsi yang dipicu Analytics dijalankan saat peristiwa Analytics yang ditentukan tercatat dalam log.

Baca artikel Pemicu Google Analytics dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi yang dipicu Analytics.

Definisi fungsi (khusus generasi ke-1)

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

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

Deklarasi resource (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: ...

Jika Anda ingin agar pengguna dapat mengonfigurasi peristiwa Analytics yang akan dideteksi saat mereka menginstal ekstensi, tambahkan parameter baru ke file extension.yaml Anda dan rujuk parameter tersebut di deklarasi resource fungsi:

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

Fungsi yang dipicu autentikasi dijalankan saat pengguna dibuat atau dihapus.

Baca artikel Pemicu Firebase Authentication dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi yang dipicu autentikasi.

Definisi fungsi (khusus generasi ke-1)

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

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

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

Deklarasi resource (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: ...

Tabel berikut menunjukkan cara menentukan setiap jenis peristiwa Authentication yang didukung:

Pemicu peristiwa Cloud Functions eventType Deskripsi
onCreate() providers/firebase.auth/eventTypes/user.create Pengguna baru sudah dibuat
onDelete() providers/firebase.auth/eventTypes/user.delete Pengguna dihapus

Cloud Firestore

Fungsi yang dipicu oleh Cloud Firestore dijalankan saat dokumen dibuat, diperbarui, atau dihapus.

Baca artikel Pemicu Cloud Firestore dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi yang dipicu Firestore.

Definisi fungsi (khusus generasi ke-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.
    // ...
  });

Deklarasi resource (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: ...

Tabel berikut menunjukkan cara menentukan setiap jenis peristiwa Cloud Firestore yang didukung:

Pemicu peristiwa Cloud Functions eventType Deskripsi
onCreate() providers/cloud.firestore/eventTypes/document.create Dokumen baru dibuat
onDelete() providers/cloud.firestore/eventTypes/document.delete Dokumen dihapus
onUpdate() providers/cloud.firestore/eventTypes/document.update Dokumen diperbarui
onWrite() providers/cloud.firestore/eventTypes/document.write Dokumen dibuat, dihapus, atau diperbarui

Jika Anda ingin pengguna dapat mengonfigurasi jalur dokumen saat menginstal ekstensi, tambahkan parameter baru ke file extension.yaml dan rujuk parameter tersebut dalam deklarasi resource fungsi Anda:

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

Fungsi yang dipicu Pub/Sub dijalankan saat pesan dipublikasikan ke topik tertentu.

Baca artikel Pemicu Pub/Sub dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi yang dipicu Pub/Sub.

Definisi fungsi (khusus generasi ke-1)

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

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

Deklarasi resource (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: ...

Jika Anda ingin pengguna dapat mengonfigurasi topik Pub/Sub saat menginstal ekstensi, tambahkan parameter baru ke file extension.yaml dan rujuk parameter tersebut dalam deklarasi resource fungsi Anda:

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

Fungsi yang dipicu Realtime Database dijalankan saat jalur yang cocok dengan pola yang ditentukan dibuat, diperbarui, atau dihapus.

Baca artikel Pemicu Realtime Database dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi yang dipicu RTDB.

Definisi fungsi (khusus generasi ke-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.
    // ...
  });

Deklarasi resource (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: ...

Tabel berikut menunjukkan cara menentukan setiap jenis peristiwa Cloud Firestore yang didukung:

Pemicu peristiwa Cloud Functions eventType Deskripsi
onCreate() providers/google.firebase.database/eventTypes/ref.create Data dibuat
onDelete() providers/google.firebase.database/eventTypes/ref.delete Data dihapus
onUpdate() providers/google.firebase.database/eventTypes/ref.update Data diperbarui
onWrite() providers/google.firebase.database/eventTypes/ref.write Data dibuat, dihapus, atau diperbarui

Jika Anda ingin pengguna dapat mengonfigurasi jalur yang akan dipantau saat menginstal ekstensi, tambahkan parameter baru ke file extension.yaml dan rujuk parameter tersebut dalam deklarasi resource fungsi Anda:

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

Fungsi yang dipicu Remote Config dijalankan saat template parameter project diperbarui.

Baca artikel Pemicu Remote Config dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi yang dipicu Remote Config.

Definisi fungsi (khusus generasi ke-1)

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

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

Deklarasi resource (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

Fungsi yang dipicu oleh Cloud Storage dijalankan saat objek dibuat, diarsipkan, atau dihapus, atau saat metadatanya berubah.

Baca artikel Pemicu Cloud Storage dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi yang dipicu Storage.

Definisi fungsi (khusus generasi ke-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) => {
  // ...
});

Deklarasi resource (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: ...

Tabel berikut menunjukkan cara menentukan setiap jenis peristiwa Cloud Storage yang didukung:

Pemicu peristiwa Cloud Functions eventType Deskripsi
onFinalize() google.storage.object.finalize Objek dibuat
onMetadataUpdate() google.storage.object.metadataUpdate Metadata objek diperbarui
onArchive() google.storage.object.archive Objek diarsipkan
onDelete() google.storage.object.delete Objek telah dihapus

Jika Anda ingin pengguna dapat mengonfigurasi bucket penyimpanan saat mereka menginstal ekstensi, tambahkan parameter baru ke file extension.yaml dan rujuk parameter tersebut dalam deklarasi resource fungsi:

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

Fungsi yang dipicu Test Lab dijalankan saat matriks uji menyelesaikan pengujiannya.

Baca artikel Pemicu Firebase Test Lab dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi yang dipicu Test Lab.

Definisi fungsi (khusus generasi ke-1)

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

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

Deklarasi resource (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: ...

Pemicu pemberitahuanCrashlytics

Fungsi yang dipicu Crashlytics dijalankan saat Crashlytics memublikasikan pemberitahuan.

Baca artikel Pemicu Firebase Alerts dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi yang dipicu pemberitahuan.

Definisi fungsi (khusus generasi ke-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) => {
  // ...
});

Deklarasi resource (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: ...

Anda dapat menggunakan nilai berikut untuk alerttype

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

Pemicu pemberitahuanPerformance Monitoring

Fungsi yang dipicu Performance Monitoring dijalankan saat Performance Monitoring memublikasikan pemberitahuan.

Baca artikel Pemicu Firebase Alerts dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi yang dipicu pemberitahuan.

Definisi fungsi (khusus generasi ke-2)

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

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

Deklarasi resource (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: ...

Pemicu pemberitahuanApp Distribution

Fungsi yang dipicu App Distribution dijalankan saat App Distribution memublikasikan pemberitahuan.

Baca artikel Pemicu Firebase Alerts dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi yang dipicu pemberitahuan.

Definisi fungsi (khusus generasi ke-2)

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

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

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

Deklarasi resource (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: ...

Anda dapat menggunakan nilai berikut untuk alerttype

  • appDistribution.newTesterIosDevice
  • appDistribution.inAppFeedback

Pemicu peristiwa kustom (Eventarc)

Fungsi yang dipicu Eventarc dijalankan saat jenis peristiwa tertentu dipublikasikan ke saluran tertentu.

Baca artikel Membuat dan menangani pemicu peristiwa kustom dalam dokumentasi Cloud Functions untuk mengetahui informasi tentang penulisan fungsi yang dipicu Eventarc.

Anda juga dapat memublikasikan peristiwa dari ekstensi untuk memberi pengguna cara menyisipkan logika kustom ke dalam ekstensi. Baca artikel Menggunakan logika kustom yang disediakan developer di dalam ekstensi.

Definisi fungsi (khusus generasi ke-2)

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

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

Deklarasi resource (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: ...

Saluran harus sudah ada saat ekstensi Anda diinstal. Misalnya, jika Anda bergantung pada peristiwa kustom dari ekstensi lain yang membuat saluran, instruksikan pengguna untuk menginstal ekstensi tersebut terlebih dahulu.

Contoh di atas akan membuat pemicu peristiwa kustom untuk saluran Firebase "default" di region us-central1. Anda dapat membuat nama saluran dan region yang dapat disesuaikan menggunakan parameter. Contoh:


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}