Bir uzantı için Cloud Functions yazma

Bir uzantı oluşturduğunuzda mantığını Cloud Functions'ı kullanarak yazarsınız. 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.

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ında functions.config() yöntemi ve Üzerinde ç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'i kullanarak. Ancak isterseniz TypeScript kullanarak işlevlerinizi oluşturun.

Aslında resmi Firebase uzantıları 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'da 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 belgelerinde 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ğıdakilere ilişkin Cloud Functions belgelerinde İşlevleri planlama 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 kullanabilirsiniz:resource

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'da Cloud Tasks ile işlevleri sıraya koyma bölümünü inceleyin 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ğıdakilerle ilgili 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 dönüşüm verilerini dinleyecek şekilde yapılandırabilmesini istiyorsanız: Uzantınızı yüklediklerinde, extension.yaml parametrenize yeni bir parametre ekleyin 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

Doğrulama

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'daki Firebase Authentication tetikleyicileri bölümünü inceleyin 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 her bir Kimlik Doğrulama etkinliğinin 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.

Aşağıdakiler için Cloud Functions belgelerindeki 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 Cloud Firestore'un her birinin 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.

Aşağıdakiler için Cloud Functions belgelerindeki 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 Pub/Sub konusunu yapılandırabilmelerini istiyorsanız Uzantınızı yüklediklerinde, extension.yaml dosyanıza yeni bir parametre ekleyin 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 Cloud Firestore'un her birinin 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.

Aşağıdakilerle ilgili Cloud Functions belgelerindeki Remote Config tetikleyicileri bölümüne bakın: 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ğıdaki işlemler için Cloud Functions belgelerindeki Cloud Storage tetikleyicileri bölümü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'ın 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 belgelerindeki 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ı tetikleyicileri

Crashlytics, bir hata simgesi yayınladığında Crashlytics tarafından tetiklenen bir işlev uyarı.

Şu işlemler için Cloud Functions belgelerindeki Firebase Alerts tetikleyicileri bölümü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

Performans İzleme uyarı tetikleyicileri

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

Şu işlemler için Cloud Functions belgelerindeki Firebase Alerts tetikleyicileri bölümü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: ...

Uygulama Dağıtımı uyarı tetikleyicileri

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

Şu işlemler için Cloud Functions belgelerindeki Firebase Alerts tetikleyicileri bölümü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'da Özel etkinlik tetikleyicileri oluşturma ve işleme başlıklı makaleyi inceleyin. 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}