نوشتن Cloud Functions برای افزونه

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

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

نسل اول و دوم Cloud Functions

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

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

ملاحظات ویژه

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

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

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

  • کیت توسعه نرم‌افزار نسل اول Cloud Functions دارای روش functions.config() و فرمان میانای خط فرمان functions:config:set است که می‌توانید از آن برای کار با مقادیر پارامتری‌شده در توابع نسل اول استفاده کنید. این تکنیک در 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

تابع فراخوانی‌شونده با اچ‌تی‌تی‌پی در نقطه پایان عمومی https مستقر می‌شود و هنگام دسترسی به نقطه پایان اجرا می‌شود.

برای کسب اطلاعات درباره نوشتن توابع راه‌اندازی‌شده با اچ‌تی‌تی‌پی، به فراخوانی توابع ازطریق درخواست‌های اچ‌تی‌تی‌پی در مستندات 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() Admin SDK به صف تکلیف افزونه شما اضافه می‌شود.

برای اطلاعات درباره نوشتن توابعی که رویدادهای چرخه حیات را مدیریت می‌کنند، مدیریت رویدادهای چرخه حیات افزونه را ببینید.

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

برای کسب اطلاعات درباره نوشتن توابع راه‌اندازی‌شده توسط Pub/Sub، به راه‌اندازهای 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

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

برای کسب اطلاعات درباره نوشتن توابع راه‌اندازی‌شده با RTDB، راه‌اندازهای Realtime Database را در اسناد 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

وقتی الگوی پارامتر پروژه به‌روز می‌شود، تابع راه‌اندازی‌شده با «پیکربندی از راه دور» اجرا می‌شود.

برای کسب اطلاعات درباره نوشتن توابع راه‌اندازی‌شده با «پیکربندی از راه دور»، راه‌اندازهای پیکربندی از راه دور را در اسناد 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 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

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

برای کسب اطلاعات درباره نوشتن توابع راه‌اندازی‌شده توسط 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 را در اسناد 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)

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 را در اسناد Cloud Functions ببینید.

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

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

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

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

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 را در اسناد Cloud Functions ببینید.

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

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

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

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

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

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)

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}