Bir uzantı için Cloud Functions yazma

Bir uzantı oluşturduğunuzda mantığını Cloud Functions kullanarak, yalnızca herhangi bir yerde kullanılacak bir fonksiyon yazmakla aynı şekilde kendi projenize ekleyebilirsiniz. İşlevlerinizi extension.yaml dosyasında açıklamışsınızdır ve Kullanıcılar uzantınızı yüklediğinde bu işlevler, belirler.

Kullanım hakkında genel bilgiler için Cloud Functions dokümanlarına bakın Cloud Functions.

1. ve 2. nesil Cloud Functions

Firebase her ikisini de destekler 1. nesil ve 2. nesil Cloud Functions. Ancak Firebase, Uzantılar, şu anda hangi bulut oluşturma işlemiyle ilgili bazı kısıtlamalar söz konusudur? işlevinden emin olun. Bu nedenle, Uzantılar, 1. ve 2. nesil işlevlerinin bir karışımını içerir.

İşlev oluşturma desteği aşağıda her tetikleyici türü için belirtilmiştir.

Dikkat edilmesi gereken noktalar

  • Bazı işlev tanımları, extension.yaml dosyasında belirtilir. Örneğin, Cloud Firestore'da document() yöntemi ile izlenecek doküman desenini ve extension.yaml öğesine karşılık gelen beyanda bulunan resource alanı aynısını belirtir.

    Böyle durumlarda, extension.yaml bölümünde belirtilen yapılandırma dosyası kullanılır ve fonksiyon tanımında belirtilen yapılandırma yoksayıldı.

    İşlevde yapılandırılmış değerin belirtilmesi yaygın bir uygulamadır. artık daha iyi kavrayacaksınız. Bu konudaki örnekler bu kalıbı izler.

  • Cloud Functions 1. nesil SDK'sı functions.config() yöntemine ve Çalışmak için kullanabileceğiniz functions:config:set CLI komutu 1. nesil işlevlerde parametre haline getirilmiş değerleri içerir. Bu teknik için desteğin sonlandırılması: Cloud Functions ve uzantılarda hiç çalışmaz. Bunun yerine functions.params modülü (önerilen) veya process.env.

TypeScript'i Kullanma

Kendi uzantınızı geliştirmeye yönelik belgelerin çoğu, iş akışlarını açıklar Cloud Functions for Firebase için JavaScript kullanılıyor. Ancak isterseniz TypeScript kullanarak işlevlerinizi oluşturun.

Aslında resmi Firebase uzantısı TypeScript'te yazılır. Bu uzantıları inceleyerek en iyi performansı nasıl kullanacağınızı göstereceğim.

Uzantınızın işlevlerini TypeScript'te yazacaksanız aşağıdaki adımları uygulamanız gerekir:

  1. Uzantınızın işlevleri kaynak kodunu JavaScript'te derleyin.

    firebase ext:dev:init komut işlevlerinizi yazmak için TypeScript'i seçmenize olanak tanır. Komut size eksiksiz, yüklenebilir bir uzantı ve ayrıca npm run build ile çalıştırabileceğiniz komut dosyası oluşturun.

  2. package.json dosyanızda main alanını JavaScript'le oluşturulmuştu.

  3. Uzantınızı yerel kaynaktan yüklüyor veya yüklüyorsanız önce TypeScript dosyalarınızı derleyin.

Desteklenen işlev tetikleyicileri

HTTP tetikleyicileri

HTTP tetiklenen bir işlev, herkese açık https uç noktasına dağıtılır ve izin verilmez.

Cloud Functions'daki HTTP istekleri aracılığıyla çağrı işlevleri bölümüne bakın. dokümanlarına göz atın.

İşlev tanımı (yalnızca 1. nesil)

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

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

Kaynak bildirimi (extension.yaml)

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

Çağrılabilir işlevler

Çağrılabilir işlevler HTTP tetiklenmiş işlevlere benzer ancak çağrılarını kolaylaştıran, istemci taraflı kodunuzdan çağrılmasına olanak tanıyan bir protokol kullanın.

Cloud Functions dokümanlarında Uygulamanızdan çağrı işlevleri bölümüne bakın bakın.

İşlev tanımı (yalnızca 1. nesil)

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

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

Kaynak bildirimi (extension.yaml)

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

Planlanmış işlev tetikleyicileri

Planlanan bir işlev, özelleştirilebilir bir programa göre sürekli olarak çalışır.

Aşağıdakiler için Cloud Functions dokümanlarındaki Program işlevleri bölümüne bakın: zamanlanmış fonksiyonlar yazma hakkında bilgi edinin.

İşlev tanımı (yalnızca 1. nesil)

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

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

Kaynak bildirimi (extension.yaml)

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

scheduleTrigger için kullanılabilir alt alanlar şunlardır:

Alan Açıklama
schedule
(zorunlu)

İşlevin çalışmasını istediğiniz sıklık.

Bu alan, tek tırnak gereklidir):

timeZone
(isteğe bağlı)

Programın çalışacağı saat dilimi.

Kullanıcıların uzantısına sahipseniz extension.yaml dosyanıza yeni bir parametre ekleyin ve parametresini işlevinizin resource bildirimindeki gibi değiştirebilirsiniz:

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

Görev sırası tetikleyicileri

Bir görev sırası işlevi, uzantınızın yaşam döngüsünde tetiklenir etkinlikleri veya Yönetici SDK'nın TaskQueue.enqueue() yöntemi.

Yazma hakkında bilgi edinmek için Uzantınızın yaşam döngüsü olaylarını işleme bölümüne bakın yaşam döngüsü olaylarını işleyen fonksiyonlar hakkındadır.

Cloud Functions dokümanındaki Cloud Tasks ile işlevleri sıraya koyma bölümüne bakın dokümanlarına göz atabilirsiniz.

İşlev tanımı (yalnızca 1. nesil)

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

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

Kaynak bildirimi (extension.yaml)

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

taskQueueTrigger özelliğini {} olarak ayarlayın veya hız sınırlarını ve görev sırasının yeniden deneme davranışını ayarlayın (bkz. Görevi ayarlama sıra) tıklayın.

İşlevinizi, uzantınızın yaşam döngüsü etkinliklerinde tetiklemek isterseniz lifecycleEvents, işlevin adını ve isteğe bağlı aşağıdaki işlemler gerçekleştirildiğinde Firebase konsolunda görüntülenecektir işlemeye başlar.

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

Belirli bir Analytics etkinliği gerçekleştiğinde Analytics tarafından tetiklenen bir işlev günlüğe kaydedildi.

Aşağıdakiler için Cloud Functions belgelerindeki Google Analytics tetikleyicileri bölümüne bakın: Analytics tarafından tetiklenen işlevleri yazma hakkında bilgi edinin.

İşlev tanımı (yalnızca 1. nesil)

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

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

Kaynak bildirimi (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: ...

Kullanıcıların Analytics etkinliğini dinleyecek şekilde yapılandırabilmesini istiyorsanız Uzantınızı yükledikten sonra, extension.yaml dosyasını açın ve fonksiyonunuzun resource bildirimindeki parametreye referans verin:

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

Bir kullanıcı oluşturulduğunda veya silindiğinde kimlik doğrulama tarafından tetiklenen bir işlev çalıştırılır.

Cloud Functions adresindeki Firebase Authentication tetikleyicileri bölümüne bakın dokümanlarına göz atın.

İşlev tanımı (yalnızca 1. nesil)

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

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

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

Kaynak bildirimi (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: ...

Aşağıdaki tabloda, desteklenen Authentication etkinliklerinin her birinin nasıl belirtileceği gösterilmektedir türler:

Cloud Functions etkinlik tetikleyicisi eventType Açıklama
onCreate() providers/firebase.auth/eventTypes/user.create Yeni kullanıcı oluşturuldu
onDelete() providers/firebase.auth/eventTypes/user.delete Kullanıcı silindi

Cloud Firestore

Cloud Firestore tarafından tetiklenen bir işlev, belge oluşturulduğunda, güncellendiğinde veya silinmiş olabilir.

Şu uygulama için Cloud Functions dokümanlarındaki Cloud Firestore tetikleyicileri bölümüne bakın: Firestore tarafından tetiklenen işlevleri yazmayla ilgili bilgiler.

İşlev tanımı (yalnızca 1. nesil)

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.
    // ...
  });

Kaynak bildirimi (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: ...

Aşağıdaki tabloda, desteklenen her bir Cloud Firestore öğesinin nasıl belirtileceği gösterilmektedir etkinlik türleri:

Cloud Functions etkinlik tetikleyicisi eventType Açıklama
onCreate() providers/cloud.firestore/eventTypes/document.create Yeni doküman oluşturuldu
onDelete() providers/cloud.firestore/eventTypes/document.delete Doküman silindi
onUpdate() providers/cloud.firestore/eventTypes/document.update Doküman güncellendi
onWrite() providers/cloud.firestore/eventTypes/document.write Doküman oluşturuldu, silindi veya güncellendi

Kullanıcıların yükleme yaptıklarında doküman yolunu yapılandırabilmelerini istiyorsanız uzantınızı göstermek için extension.yaml dosyanıza yeni bir parametre ekleyip fonksiyonunuzun resource bildirimindeki parametre:

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

Pub/Sub tarafından tetiklenen bir işlev, belirli bir konu.

Şu sürüm için Cloud Functions dokümanlarındaki Pub/Sub tetikleyicileri bölümüne bakın: ve Pub/Sub tarafından tetiklenen işlevleri yazma hakkında bilgi edinin.

İşlev tanımı (yalnızca 1. nesil)

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

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

Kaynak bildirimi (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: ...

Kullanıcıların aşağıdaki işlemleri gerçekleştirirken Pub/Sub konusunu yapılandırabilmesini istiyorsanız: uzantınızı yüklerlerse extension.yaml dosyanıza yeni bir parametre eklerler ve işlevinizin resource bildirimindeki parametreye referans verin:

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

Belirtilen bir yol ile eşleşen bir yol olduğunda, Gerçek Zamanlı Veritabanı tarafından tetiklenen işlevler oluşturulduğundan, güncellendiğinden veya silindiğinden emin olun.

Cloud Functions belgelerindeki Realtime Database tetikleyicileri bölümüne bakın inceleyin.

İşlev tanımı (yalnızca 1. nesil)

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.
    // ...
  });

Kaynak bildirimi (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: ...

Aşağıdaki tabloda, desteklenen her bir Cloud Firestore öğesinin nasıl belirtileceği gösterilmektedir etkinlik türleri:

Cloud Functions etkinlik tetikleyicisi eventType Açıklama
onCreate() providers/google.firebase.database/eventTypes/ref.create Oluşturulan veriler
onDelete() providers/google.firebase.database/eventTypes/ref.delete Veriler silindi
onUpdate() providers/google.firebase.database/eventTypes/ref.update Veriler güncellendi
onWrite() providers/google.firebase.database/eventTypes/ref.write Oluşturulan, silinen veya güncellenen veriler

Kullanıcıların uygulamayı yüklerken izleyecekleri yolu yapılandırabilirler. uzantınızı göstermek için extension.yaml dosyanıza yeni bir parametre ekleyip fonksiyonunuzun resource bildirimindeki parametre:

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

Remote Config tarafından tetiklenen bir işlev, projenin parametre şablonu güncellendi.

Remote Config tetikleyicileri ile ilgili olarak Cloud Functions dokümanlarındaki Remote Config tarafından tetiklenen işlevleri yazma hakkında bilgi edinin.

İşlev tanımı (yalnızca 1. nesil)

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

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

Kaynak bildirimi (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

Cloud Storage tarafından tetiklenen işlevler, bir nesne oluşturulduğunda, arşivlendiğinde veya silme veya meta verileri değiştiğinde.

Aşağıdakiler için Cloud Functions belgelerindeki Cloud Storage tetikleyicileri'ne bakın: Storage tarafından tetiklenen işlevleri yazma hakkında bilgi edinin.

İşlev tanımı (yalnızca 1. nesil)

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) => {
  // ...
});

Kaynak bildirimi (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: ...

Aşağıdaki tabloda, desteklenen her bir Cloud Storage öğesinin nasıl belirtileceği gösterilmektedir etkinlik türleri:

Cloud Functions etkinlik tetikleyicisi eventType Açıklama
onFinalize() google.storage.object.finalize Nesne oluşturuldu
onMetadataUpdate() google.storage.object.metadataUpdate Nesne meta verileri güncellendi
onArchive() google.storage.object.archive Nesne arşivlendi
onDelete() google.storage.object.delete Nesne silindi

Kullanıcıların yükleme yaptıklarında depolama paketini yapılandırabilmelerini istiyorsanız uzantınızı göstermek için extension.yaml dosyanıza yeni bir parametre ekleyip fonksiyonunuzun resource bildirimindeki parametre:

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

Test Lab tarafından tetiklenen bir işlev, test matrisi testlerini tamamladığında çalışır.

Cloud Functions dokümanlarındaki Firebase Test Lab tetikleyicileri bölümüne bakın inceleyin.

İşlev tanımı (yalnızca 1. nesil)

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

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

Kaynak bildirimi (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 uyarı tetikleyicisi

Crashlytics tarafından tetiklenen bir işlev, Crashlytics tarafından tetiklenen bir uyarı.

Şu uygulama için Cloud Functions dokümanlarındaki Firebase Alerts tetikleyicileri'ne bakın: uyarı tetiklenen işlevleri yazma hakkında bilgi edinin.

İşlev tanımı (yalnızca 2. nesil)

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) => {
  // ...
});

Kaynak bildirimi (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: ...

alerttype için aşağıdaki değerleri kullanabilirsiniz

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

Performance Monitoring uyarı tetikleyicisi

Performance Monitoring bir uyarı yayınladığında Performance Monitoring tarafından tetiklenen bir işlev çalıştırılır.

Şu uygulama için Cloud Functions dokümanlarındaki Firebase Alerts tetikleyicileri'ne bakın: uyarı tetiklenen işlevleri yazma hakkında bilgi edinin.

İşlev tanımı (yalnızca 2. nesil)

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

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

Kaynak bildirimi (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 uyarı tetikleyicisi

App Distribution bir uyarı yayınladığında App Distribution tarafından tetiklenen bir işlev çalıştırılır.

Şu uygulama için Cloud Functions dokümanlarındaki Firebase Alerts tetikleyicileri'ne bakın: uyarı tetiklenen işlevleri yazma hakkında bilgi edinin.

İşlev tanımı (yalnızca 2. nesil)

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

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

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

Kaynak bildirimi (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: ...

alerttype için aşağıdaki değerleri kullanabilirsiniz

  • appDistribution.newTesterIosDevice
  • appDistribution.inAppFeedback

Özel etkinlik tetikleyicileri (Eventarc)

Eventarc tarafından tetiklenen bir işlev, belirli bir etkinlik türü görebilirsiniz.

Cloud Functions dokümanında Özel etkinlik tetikleyicileri oluşturma ve işleme konusuna bakın. dokümanlarına göz atın.

Ayrıca, kullanıcılara uzantılardan öğe ekleme olanağı sunmak için uzantılarınızdaki etkinlikleri yayınlayabilirsiniz. özel mantık ilkelerinize uygun olarak ekleyebilirsiniz. Geliştirici tarafından sağlanan özel mantığı uzantısı ekleyin.

İşlev tanımı (yalnızca 2. nesil)

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

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

Kaynak bildirimi (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: ...

Uzantınız yüklendiğinde kanalın zaten mevcut olması gerekir. Örneğin, Kanalı oluşturan başka bir uzantıdaki özel etkinliklere bağlı kalırsanız Kullanıcılarınıza öncelikle bu uzantıyı yüklemeleri gerekir.

Yukarıdaki örnek, "default" için bir özel etkinlik tetikleyicisi oluşturur Firebase us-central1 bölgede yayınlıyorsunuz. Kanalınızın adını ve bölgesini seçebilirsiniz. özelleştirilebilir olması gerekir. Örneğin:


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}