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

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

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

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

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

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

ملاحظات ویژه

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

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

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

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

استفاده از تایپ‌اسکریپت

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

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

برای اطلاعات بیشتر در مورد نوشتن توابع صف وظایف، به «در صف قرار دادن توابع با وظایف ابری» در مستندات 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

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

برای اطلاعات بیشتر در مورد نوشتن توابع فعال‌شده توسط احراز هویت، به بخش محرک‌های احراز هویت فایربیس در مستندات 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-triggered به بخش Pub/Sub triggers در مستندات 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-triggered) زمانی اجرا می‌شود که مسیری که با یک الگوی مشخص مطابقت دارد، ایجاد، به‌روزرسانی یا حذف شود.

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

یک تابع فعال‌شده توسط فضای ذخیره‌سازی ابری، زمانی اجرا می‌شود که یک شیء ایجاد، بایگانی یا حذف شود، یا زمانی که فراداده‌های آن تغییر کند.

برای اطلاعات بیشتر در مورد نوشتن توابع فعال شده توسط 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

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

برای اطلاعات بیشتر در مورد نوشتن توابع فعال شده توسط آزمایشگاه تست، به محرک‌های آزمایشگاه تست فایربیس در مستندات 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 -triggered زمانی اجرا می‌شود که 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)

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)

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)

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}