إنشاء ومعالجة مشغلات الأحداث المخصصة

باستخدام Cloud Functions v2 ، يمكنك تشغيل وظائف استجابة للأحداث المخصصة . هذه هي الأحداث التي يقدمها موفرو الأحداث الخاصون أو الإضافيون ، على عكس أحداث Firebase التي تدعمها أصلاً Firebase SDK لوظائف السحابة.

أثناء المعاينة العامة ، يتم توفير الأحداث المخصصة المتاحة بواسطة Firebase Extensions. يمكنك تثبيت إضافة في تطبيقك ثم الاستجابة للأحداث المخصصة في هذا التدفق الأساسي:

  1. قم بتثبيت ملحق يوفر حدثًا مخصصًا واحدًا أو أكثر.
  2. تعامل مع نوع حدث عن طريق نشر معالج onCustomEventPublished . في هذه الوظيفة ، قم بتحليل الحمولة التي تم إرجاعها في كائن CloudEvent ، وقم بتنفيذ أي منطق مخصص يتطلبه تطبيقك.

على سبيل المثال ، قد يصدر أحد الإضافات المصممة لمساعدة التطبيقات في معالجة الصور الكبيرة حدثًا عند الانتهاء من تغيير حجم الصورة. يمكن أن تتعامل التطبيقات التي تم تثبيت هذه الإضافة عليها مع حدث الإكمال عن طريق تحديث الروابط في التطبيق للإشارة إلى الإصدارات التي تم تغيير حجمها من الصورة.

تتوافق جميع الأحداث المخصصة مع تنسيق حدث CloudEvents JSON . للحصول على معلومات أساسية مثل قائمة الأحداث المتاحة وتفاصيل حمولة الحدث ، راجع وثائق ملحق معين.

التعامل مع حدث مخصص

بمجرد أن تكتشف حدثًا مخصصًا متاحًا من ملحق مثبت ، يمكنك التعامل مع هذا الحدث بامتداد
معالج 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 المقدمة بواسطة الحدث.

التعامل مع حدث على قناة غير افتراضية

يفترض المثال أعلاه أن حدث إكمال الصورة قد تم نشره على القناة الافتراضية ، في الموقع الافتراضي us-central1 كما هو محدد في الامتداد. في الحالات التي يتم فيها نشر حدث مخصص على قناة غير افتراضية ، ستحتاج إلى تحديد القناة في كود وظيفتك. على سبيل المثال ، إذا كنت تريد معالجة الأحداث التي تم نشرها في قناة غير افتراضية لموقع 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) => { ... });