با توابع ابری (نسل دوم)، میتوانید عملکردها را در پاسخ به رویدادهای سفارشی فعال کنید. اینها رویدادهایی هستند که توسط ارائه دهندگان رویداد ویژه یا اضافی ارائه می شوند، برخلاف رویدادهای Firebase که به طور بومی توسط Firebase SDK برای توابع ابری پشتیبانی می شوند. از طریق راهاندازهای رویداد سفارشی، برنامه شما میتواند به رویدادهای ارائهشده توسط برنامههای افزودنی Firebase پاسخ دهد، یا میتوانید رویدادهای سفارشی خود را منتشر کنید و عملکردهایی را در پاسخ به آنها فعال کنید.
همه رویدادهای سفارشی با قالب رویداد CloudEvents JSON مطابقت دارند و در Eventarc منتشر میشوند. هزینه های استفاده از Eventarc اعمال می شود.
توابع را با رویدادهای سفارشی فعال کنید
میتوانید رویدادهای سفارشی را منتشر کنید (یا رویدادها را از برنامههای افزودنی Firebase دریافت کنید) و توابع را در پاسخ به آن رویدادها با اجرای این جریان اصلی راهاندازی کنید:
- رویدادهای مورد نظر را در یک کانال Eventarc منتشر کنید یا رویدادهای موجود را که توسط افزونه ای که نصب کرده اید ارائه شده است شناسایی کنید.
- در کد تابع خود، با یک کنترل کننده
onCustomEventPublished
در رویدادهای کانال Eventarc مشترک شوید. - در تابع، محموله بازگشتی در شی 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) => { ... });