获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

ایجاد و رسیدگی به محرک های رویداد سفارشی

با توابع ابری (نسل دوم)، می‌توانید عملکردها را در پاسخ به رویدادهای سفارشی فعال کنید. اینها رویدادهایی هستند که توسط ارائه دهندگان رویداد ویژه یا اضافی ارائه می شوند، برخلاف رویدادهای Firebase که به طور بومی توسط Firebase SDK برای توابع ابری پشتیبانی می شوند. از طریق راه‌اندازهای رویداد سفارشی، برنامه شما می‌تواند به رویدادهای ارائه‌شده توسط برنامه‌های افزودنی Firebase پاسخ دهد، یا می‌توانید رویدادهای سفارشی خود را منتشر کنید و عملکردهایی را در پاسخ به آن‌ها فعال کنید.

همه رویدادهای سفارشی با قالب رویداد CloudEvents JSON مطابقت دارند و در Eventarc منتشر می‌شوند. هزینه های استفاده از Eventarc اعمال می شود.

توابع را با رویدادهای سفارشی فعال کنید

می‌توانید رویدادهای سفارشی را منتشر کنید (یا رویدادها را از برنامه‌های افزودنی Firebase دریافت کنید) و توابع را در پاسخ به آن رویدادها با اجرای این جریان اصلی راه‌اندازی کنید:

  1. رویدادهای مورد نظر را در یک کانال Eventarc منتشر کنید یا رویدادهای موجود را که توسط افزونه ای که نصب کرده اید ارائه شده است شناسایی کنید.
  2. در کد تابع خود، با یک کنترل کننده onCustomEventPublished در رویدادهای کانال Eventarc مشترک شوید.
  3. در تابع، محموله بازگشتی در شی CloudEvent را تجزیه کنید و هر منطق سفارشی مورد نیاز برنامه شما را انجام دهید.

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

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

یک رویداد را در یک کانال منتشر کنید

رویدادهای Eventarc در کانال ها منتشر می شوند. کانال ها راهی برای گروه بندی رویدادهای مرتبط و مدیریت مجوزهای دسترسی هستند. هنگامی که یک برنامه افزودنی را نصب می کنید یا تابعی را مستقر می کنید که رویدادهای سفارشی را مصرف می کند، Firebase به طور خودکار یک کانال پیش فرض به نام firebase در منطقه us-central1 ایجاد می کند. Firebase Admin SDK یک بسته eventarc برای انتشار در کانال ها فراهم می کند.

برای انتشار یک رویداد از یک سرور قابل اعتماد (یا عملکرد دیگری) با استفاده از کانال پیش فرض:

import {getEventarc} from 'firebase-admin/eventarc';

getEventarc().channel().publish({
    type: 'achieved-leaderboard',
    subject: 'Welcome to the top 10',
    data: {
      message: 'You have achieved the nth position in our leaderboard!  To see . . .'
    }
});

علاوه بر ایجاد خودکار کانال پیش‌فرض، Firebase متغیر محیطی EVENTARC_CLOUD_EVENT_SOURCE را تنظیم می‌کند که منبع رویداد را مشخص می‌کند. اگر رویدادهایی را خارج از Cloud Functions برای Firebase منتشر می کنید، باید به صراحت قسمت source را به بار رویداد خود اضافه کنید.

رویدادها را با onCustomEventPublished

می‌توانید همه رویدادهای سفارشی، از جمله رویدادهای برنامه‌های افزودنی را با onCustomEventPublished کنید. ابتدا، این کنترلر را از Eventarc SDK به همراه Firebase Admin SDK برای Node.js برای منطق سفارشی خود و SDK logger برای رسیدگی به خطاها وارد کنید:

const {onCustomEventPublished} = require("firebase-functions/v2/eventarc");
const logger = require("firebase-functions/logger");
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");

در کد تابع خود، نام رویداد را مانند تابع مثال onimageresized :

exports.onimageresized = onCustomEventPublished(
    "firebase.extensions.storage-resize-images.v1.complete",
    (event) => {
      logger.info("Received image resize completed event", event);
      // For example, write resized image details into Firestore.
      return getFirestore()
          .collection("images")
          .doc(event.subject.replace("/", "_")) // original file path
          .set(event.data); // resized images paths and sizes
    });

برای هر برنامه افزودنی خاص، باری که در شی رویداد بازگردانده می شود، داده هایی را ارائه می دهد که می توانید از آنها برای اجرای منطق سفارشی برای جریان برنامه خود استفاده کنید. در این مورد، تابع از Admin SDK برای کپی کردن ابرداده های مربوط به تصویر تغییر اندازه در مجموعه ای در Cloud Firestore، به دست آوردن نام فایل از subject ارائه شده توسط رویداد، و ذخیره ابرداده از data ارائه شده توسط رویداد استفاده می کند.

انتشار و مدیریت رویدادها در کانال های غیر پیش فرض

کانال‌های سفارشی می‌توانند برای مواردی مفید باشند که نیاز به مجوز خاص یا سایر الزامات دارید و سطح دید و دسترسی یکسانی برای همه رویدادها نمی‌خواهید. می توانید کانال های خود را با استفاده از کنسول Google Cloud ایجاد کنید. انتشار و عضویت رویدادها باید در همین کانال انجام شود.

در مواردی که یک رویداد سفارشی در یک کانال غیر پیش‌فرض منتشر می‌شود، باید کانال را در کد تابع خود مشخص کنید. برای مثال، اگر می‌خواهید رویدادهایی را که در یک کانال غیر پیش‌فرض برای مکان us-west1 منتشر می‌شوند مدیریت کنید، باید کانال را مطابق شکل مشخص کنید:

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

export const func = onCustomEventPublished(
    {
      eventType: "firebase.extensions.storage-resize-images.v1.complete",
      channel: "locations/us-west1/channels/firebase",
      region: "us-west1",
    },
    (event) => { ... });