توابع ابری را برای یک برنامه افزودنی بنویسید

وقتی یک افزونه ایجاد می‌کنید، منطق آن را با استفاده Cloud Functions می‌نویسید، تقریباً به همان روشی که تابعی را می‌نویسید که فقط در پروژه خود استفاده می‌شود. شما توابع خود را در فایل extension.yaml اعلام می‌کنید و زمانی که کاربران پسوند شما را نصب می‌کنند، این توابع در پروژه آنها مستقر می‌شوند.

برای اطلاعات کلی در مورد استفاده Cloud Functions به مستندات Cloud Functions مراجعه کنید.

Cloud Functions نسل 1 و 2

Firebase از Cloud Functions نسل اول و نسل دوم پشتیبانی می کند. با این حال، افزونه‌های Firebase در حال حاضر محدودیت‌هایی در مورد اینکه کدام نسل از عملکرد ابری را می‌توانید با انواع خاصی از ماشه‌ها استفاده کنید، دارند. به همین دلیل، بسیاری از برنامه های افزودنی شامل ترکیبی از توابع نسل 1 و 2 هستند.

پشتیبانی از تولید تابع برای هر نوع ماشه در زیر ذکر شده است.

ملاحظات خاص

  • برخی از تعاریف تابع از شما می خواهند که اطلاعاتی را که در فایل extension.yaml نیز مشخص شده است، مشخص کنید. به عنوان مثال، Cloud Firestore یک متد document() دارد که الگوی سند برای تماشا را مشخص می‌کند، و اعلان مربوطه آن در extension.yaml دارای یک فیلد resource است که همان را مشخص می‌کند.

    در این مواقع از پیکربندی مشخص شده در فایل extension.yaml استفاده می شود و پیکربندی مشخص شده در تعریف تابع نادیده گرفته می شود.

    معمول است که مقدار پیکربندی شده را در تعریف تابع بدون توجه به مستندسازی مشخص کنید. نمونه های موجود در این صفحه از این الگو پیروی می کنند.

  • Cloud Functions 1st Gen SDK دارای یک متد functions.config() و functions:config:set CLI است که می توانید از آن برای کار با مقادیر پارامتر شده در توابع نسل اول استفاده کنید. این تکنیک در Cloud Functions منسوخ شده است و به هیچ وجه در یک برنامه افزودنی کار نخواهد کرد . در عوض، از ماژول functions.params (توصیه شده) یا process.env استفاده کنید.

با استفاده از TypeScript

اکثر اسناد برای توسعه برنامه افزودنی خود، گردش کار را با استفاده از جاوا اسکریپت برای Cloud Functions for Firebase توصیف می کند. با این حال، در عوض می توانید توابع خود را با استفاده از TypeScript بنویسید.

در واقع تمام پسوندهای رسمی Firebase با TypeScript نوشته شده اند. برای استفاده از TypeScript برای برنامه افزودنی خود، می‌توانید آن برنامه‌های افزودنی را برای بهترین روش‌ها بررسی کنید.

اگر توابع برنامه افزودنی خود را در TypeScript می نویسید، قبل از نصب برنامه افزودنی خود باید موارد زیر را انجام دهید:

  1. کد منبع توابع برنامه افزودنی خود را در جاوا اسکریپت کامپایل کنید.

    دستور firebase ext:dev:init به شما اجازه می دهد تا TypeScript را برای نوشتن توابع خود انتخاب کنید. این دستور یک پسوند کامل و قابل نصب و همچنین یک اسکریپت ساخت را در اختیار شما قرار می دهد که می توانید با npm run build اجرا کنید .

  2. در فایل package.json خود، مطمئن شوید که فیلد main را روی جاوا اسکریپت تولید شده قرار دهید.

  3. اگر برنامه افزودنی خود را از منبع محلی نصب یا آپلود می کنید، ابتدا فایل های TypeScript خود را کامپایل کنید.

محرک های عملکرد پشتیبانی شده

محرک های HTTP

یک تابع راه اندازی شده توسط HTTP در یک نقطه پایانی عمومی https مستقر می شود و زمانی که به نقطه پایانی دسترسی پیدا می کند اجرا می شود.

برای اطلاعات در مورد نوشتن توابع راه‌اندازی شده توسط HTTP، به توابع تماس از طریق درخواست‌های HTTP در مستندات Cloud Functions مراجعه کنید.

تعریف تابع (فقط نسل اول)

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

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

اعلام منبع (extension.yaml)

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

توابع قابل فراخوانی

توابع قابل فراخوانی مشابه توابع راه‌اندازی شده توسط HTTP هستند، اما پروتکلی را پیاده‌سازی می‌کنند که تماس آنها را از کد سمت کلاینت راحت می‌کند.

برای اطلاعات در مورد استفاده از توابع قابل فراخوانی، به توابع تماس از برنامه خود در مستندات Cloud Functions مراجعه کنید.

تعریف تابع (فقط نسل اول)

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

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

اعلام منبع (extension.yaml)

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

محرک های عملکرد برنامه ریزی شده

یک تابع برنامه ریزی شده به طور مکرر بر اساس یک برنامه زمانی قابل تنظیم اجرا می شود.

برای اطلاعات در مورد نوشتن توابع زمان‌بندی‌شده، به توابع زمان‌بندی در مستندات Cloud Functions مراجعه کنید.

تعریف تابع (فقط نسل اول)

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

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

اعلام منبع (extension.yaml)

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

زیر فیلدهای موجود برای scheduleTrigger در اینجا آمده است:

میدان توضیحات
schedule
(الزامی)

فرکانسی که می خواهید تابع در آن اجرا شود.

این فیلد می‌تواند رشته‌هایی را بپذیرد که از هر یک از نحو استفاده می‌کنند (پیچیدن در گیومه‌های تکی الزامی است):

timeZone
(اختیاری)

منطقه زمانی که برنامه در آن اجرا می شود.

اگر می‌خواهید کاربران هنگام نصب برنامه افزودنی شما بتوانند زمان‌بندی را پیکربندی کنند، یک پارامتر جدید به فایل extension.yaml خود اضافه کنید و پارامتر را در اعلان 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

محرک های صف کار

یک تابع صف کار یا در رویدادهای چرخه عمر برنامه افزودنی شما فعال می شود یا زمانی که با استفاده از روش TaskQueue.enqueue() 's Admin SDK به صورت دستی به صف وظایف برنامه افزودنی اضافه می شود.

برای اطلاعات در مورد نوشتن توابع که رویدادهای چرخه حیات را مدیریت می‌کنند ، به Handle your eventcyclescycles مراجعه کنید.

برای اطلاعات در مورد نوشتن توابع صف وظایف ، به توابع ردیف کردن با وظایف Cloud در مستندات Cloud Functions مراجعه کنید.

تعریف تابع (فقط نسل اول)

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

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

اعلام منبع (extension.yaml)

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

ویژگی taskQueueTrigger را روی {} تنظیم کنید یا نقشه‌ای از گزینه‌هایی که محدودیت‌های نرخ و رفتار مجدد صف کار را تنظیم می‌کنند ( به تنظیم صف کار مراجعه کنید).

اگر می‌خواهید عملکرد خود را در رویدادهای چرخه عمر برنامه افزودنی خود فعال کنید، رکوردهای lifecycleEvents را با نام تابع و یک پیام پردازش اختیاری اضافه کنید که هنگام شروع پردازش در کنسول Firebase نمایش داده می‌شود.

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

یک تابع راه‌اندازی آنالیز زمانی اجرا می‌شود که رویداد آنالیتیکس مشخص شده ثبت شود.

برای اطلاعاتی در مورد نوشتن توابع راه‌اندازی شده توسط Analytics، محرک‌های Google Analytics را در مستندات Cloud Functions ببینید.

تعریف تابع (فقط نسل اول)

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

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

اعلام منبع (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: ...

اگر می‌خواهید کاربران بتوانند رویداد Analytics را به گونه‌ای پیکربندی کنند که هنگام نصب افزونه شما به آن گوش دهند، یک پارامتر جدید به فایل extension.yaml خود اضافه کنید و به پارامتر در اعلان resource تابع خود اشاره کنید:

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

یک تابع احراز هویت زمانی که کاربر ایجاد یا حذف می شود اجرا می شود.

برای اطلاعات در مورد نوشتن توابع احراز هویت، به محرک‌های احراز هویت Firebase در مستندات Cloud Functions مراجعه کنید.

تعریف تابع (فقط نسل اول)

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

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

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

اعلام منبع (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: ...

جدول زیر نحوه تعیین هر یک از انواع رویداد Authentication پشتیبانی شده را نشان می دهد:

عامل رویداد Cloud Functions eventType توضیحات
onCreate() providers/firebase.auth/eventTypes/user.create کاربر جدید ایجاد شد
onDelete() providers/firebase.auth/eventTypes/user.delete کاربر حذف شد

Cloud Firestore

یک تابع راه اندازی شده توسط Cloud Firestore هنگام ایجاد، به روز رسانی یا حذف یک سند اجرا می شود.

برای اطلاعات در مورد نوشتن توابع راه‌اندازی شده توسط Firestore، محرک‌های Cloud Firestore را در مستندات Cloud Functions ببینید.

تعریف تابع (فقط نسل اول)

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

اعلام منبع (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: ...

جدول زیر نحوه تعیین هر یک از انواع رویداد Cloud Firestore پشتیبانی شده را نشان می دهد:

عامل رویداد Cloud Functions eventType توضیحات
onCreate() providers/cloud.firestore/eventTypes/document.create سند جدید ایجاد شد
onDelete() providers/cloud.firestore/eventTypes/document.delete سند حذف شد
onUpdate() providers/cloud.firestore/eventTypes/document.update سند به روز شد
onWrite() providers/cloud.firestore/eventTypes/document.write سند ایجاد، حذف یا به روز شده است

اگر می‌خواهید کاربران هنگام نصب برنامه افزودنی شما بتوانند مسیر سند را پیکربندی کنند، یک پارامتر جدید به فایل extension.yaml خود اضافه کنید و پارامتر را در اعلان resource تابع خود ارجاع دهید:

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-triggered زمانی اجرا می شود که پیامی برای یک موضوع خاص منتشر می شود.

برای اطلاعات در مورد نوشتن توابع Pub/Sub-trigger شده، به راه‌اندازهای Pub/Sub در مستندات Cloud Functions مراجعه کنید.

تعریف تابع (فقط نسل اول)

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

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

اعلام منبع (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: ...

اگر می خواهید کاربران هنگام نصب افزونه شما بتوانند موضوع Pub/Sub را پیکربندی کنند، یک پارامتر جدید به فایل extension.yaml خود اضافه کنید و به پارامتر در اعلان resource تابع خود اشاره کنید:

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

یک تابع ایجاد شده توسط پایگاه داده بیدرنگ زمانی اجرا می شود که مسیری مطابق با یک الگوی مشخص ایجاد، به روز یا حذف شود.

برای اطلاعات مربوط به نوشتن توابع راه‌اندازی شده توسط RTDB، راه‌اندازهای پایگاه داده بیدرنگ را در مستندات Cloud Functions ببینید.

تعریف تابع (فقط نسل اول)

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

اعلام منبع (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: ...

جدول زیر نحوه تعیین هر یک از انواع رویداد Cloud Firestore پشتیبانی شده را نشان می دهد:

عامل رویداد Cloud Functions eventType توضیحات
onCreate() providers/google.firebase.database/eventTypes/ref.create داده ایجاد شده است
onDelete() providers/google.firebase.database/eventTypes/ref.delete داده ها حذف شد
onUpdate() providers/google.firebase.database/eventTypes/ref.update داده ها به روز شد
onWrite() providers/google.firebase.database/eventTypes/ref.write داده های ایجاد، حذف یا به روز شده است

اگر می خواهید کاربران هنگام نصب برنامه افزودنی شما بتوانند مسیر تماشا را پیکربندی کنند، یک پارامتر جدید به فایل extension.yaml خود اضافه کنید و پارامتر را در اعلان resource تابع خود ارجاع دهید:

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 اجرا می شود.

برای اطلاعات در مورد نوشتن توابع راه‌اندازی Remote Config، به راه‌اندازهای Remote Config در مستندات Cloud Functions مراجعه کنید.

تعریف تابع (فقط نسل اول)

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

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

اعلام منبع (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 زمانی اجرا می شود که یک شی ایجاد می شود، بایگانی می شود، یا حذف می شود، یا زمانی که ابرداده آن تغییر می کند.

برای اطلاعات در مورد نوشتن توابع راه‌اندازی ذخیره‌سازی، محرک‌های Cloud Storage را در مستندات Cloud Functions ببینید.

تعریف تابع (فقط نسل اول)

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

اعلام منبع (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: ...

جدول زیر نحوه تعیین هر یک از انواع رویداد Cloud Storage پشتیبانی شده را نشان می دهد:

عامل رویداد Cloud Functions eventType توضیحات
onFinalize() google.storage.object.finalize شی ایجاد شد
onMetadataUpdate() google.storage.object.metadataUpdate ابرداده شی به روز شد
onArchive() google.storage.object.archive شی بایگانی شد
onDelete() google.storage.object.delete شی حذف شد

اگر می خواهید کاربران هنگام نصب برنامه افزودنی شما بتوانند سطل ذخیره سازی را پیکربندی کنند، یک پارامتر جدید به فایل extension.yaml خود اضافه کنید و به پارامتر در اعلان resource تابع خود اشاره کنید:

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

یک تابع راه‌اندازی شده توسط آزمایشگاه آزمایشی زمانی اجرا می‌شود که یک ماتریس آزمایشی آزمایشات خود را به پایان برساند.

برای اطلاعاتی در مورد نوشتن توابع راه‌اندازی شده توسط آزمایشگاه آزمایشی، محرک‌های Firebase Test Lab را در مستندات Cloud Functions ببینید.

تعریف تابع (فقط نسل اول)

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

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

اعلام منبع (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 باعث می شود

زمانی که Crashlytics یک هشدار منتشر می‌کند، یک تابع فعال شده با Crashlytics اجرا می‌شود.

برای اطلاعاتی در مورد نوشتن عملکردهای هشدار دهنده، راه‌اندازهای Firebase Alerts را در مستندات Cloud Functions ببینید.

تعریف عملکرد (فقط نسل دوم)

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

اعلام منبع (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 استفاده کنید

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

هشدار Performance Monitoring

زمانی که Performance Monitoring هشداری را منتشر می‌کند، یک تابع فعال‌شده با نظارت Performance Monitoring اجرا می‌شود.

برای اطلاعاتی در مورد نوشتن عملکردهای هشدار دهنده، راه‌اندازهای Firebase Alerts را در مستندات Cloud Functions ببینید.

تعریف عملکرد (فقط نسل دوم)

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

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

اعلام منبع (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

هنگامی که App Distribution هشداری را منتشر می‌کند، یک تابع راه‌اندازی شده با App Distribution اجرا می‌شود.

برای اطلاعاتی در مورد نوشتن عملکردهای هشدار دهنده، راه‌اندازهای Firebase Alerts را در مستندات Cloud Functions ببینید.

تعریف عملکرد (فقط نسل دوم)

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

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

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

اعلام منبع (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 استفاده کنید

  • appDistribution.newTesterIosDevice
  • appDistribution.inAppFeedback

محرک های رویداد سفارشی (Eventarc)

یک تابع فعال شده توسط Eventarc زمانی اجرا می شود که یک نوع رویداد خاص در یک کانال خاص منتشر شود.

برای اطلاعات در مورد نوشتن توابع فعال شده توسط Eventarc، به ایجاد و رسیدگی به محرک‌های رویداد سفارشی در مستندات Cloud Functions مراجعه کنید.

همچنین می توانید رویدادها را از برنامه های افزودنی خود منتشر کنید تا به کاربران راهی برای درج منطق سفارشی در برنامه افزودنی خود ارائه دهید. به استفاده از منطق سفارشی ارائه شده توسط توسعه دهنده در یک برنامه افزودنی مراجعه کنید.

تعریف عملکرد (فقط نسل دوم)

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

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

اعلام منبع (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: ...

وقتی برنامه افزودنی شما نصب شد، کانال باید از قبل وجود داشته باشد. برای مثال، اگر به رویدادهای سفارشی از برنامه افزودنی دیگری که کانال را ایجاد می کند وابسته هستید، به کاربران خود دستور دهید ابتدا آن برنامه افزودنی را نصب کنند.

مثال بالا یک راه‌انداز رویداد سفارشی برای کانال Firebase "پیش‌فرض" در منطقه us-central1 ایجاد می‌کند. می توانید نام کانال و منطقه را با استفاده از پارامترها قابل تنظیم کنید. به عنوان مثال:


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}