يمكنك منح المستخدمين الذين يثبّتون إضافتك إمكانية إدراج منطقهم المخصّص في تنفيذ إضافتك. هناك طريقتان لتحقيق هذا:
أحداث Eventarc: لمنح المستخدمين طريقة للتفاعل بشكل غير متزامن مع الأحداث، يمكنك النشر على Eventarc. ويمكن للمستخدمين تفعيل وظائف معالج الأحداث التي، على سبيل المثال، إرسال الإشعارات بعد اكتمال مهام طويلة الأمد، أو يمكنهم تحديد وظائفهم الخاصة بعد المعالجة.
العناصر المُدمجة المتزامنة: لمنح المستخدمين طريقة لإضافة منطق حظر إلى إضافتك، يمكنك إضافة عناصر مدمجة متزامنة في نقاط محدّدة مسبقًا في عمل إضافة Chrome. في هذه النقاط، يمكنك تشغيل دالة مقدّم خدمة مستخدمين ومتابعة الخطوات بعد اكتمالها فقط. تندرج مهام المعالجة المُسبَقة غالبًا ضمن هذه الفئة.
يمكن أن تستخدم الإضافة إحدى الطريقتَين أو كلتيهما.
أحداث Eventarc
لنشر الأحداث من إحدى الإضافات، اتّبِع الخطوات التالية:
حدِّد أنواع الأحداث التي ستنشرها في ملف
extension.yaml
:events: - type: publisher-id.extension-name.version.event-name description: event-description - type: publisher-id.extension-name.version.another-event-name description: another-event-description
يتألف المعرّف
type
من عدة حقول مفصولة بالنقاط. يجب ملء حقول رقم تعريف الناشر واسم الإضافة واسم الحدث. يُنصح باستخدام حقل الإصدار. اختَر اسمًا فريدًا ووصفيًا للحدث لكل نوع حدث تنشره.على سبيل المثال، تعلن إضافة
storage-resize-images
عن نوع حدث واحد:events: - type: firebase.extensions.storage-resize-images.v1.complete description: | Occurs when image resizing completes. The event will contain further details about specific formats and sizes.
سيتمكّن المستخدمون من اختيار الأحداث التي يريدون الاشتراك فيها عند تثبيت الإضافة.
في وظائف الإضافة، استورِد Eventarc API من Admin SDK وأعِد ضبط قناة أحداث باستخدام إعدادات التثبيت الخاصة بالمستخدم. يتم عرض هذه الإعدادات باستخدام متغيّرات البيئة التالية:
EVENTARC_CHANNEL
: هو الاسم المؤهّل بالكامل لقناة Eventarc التي اختار المستخدم نشر الفعاليات إليها.EXT_SELECTED_EVENTS
: قائمة مفصولة بفواصل لأنواع الأحداث التي اختار المستخدم نشرها. عند إعداد قناة باستخدام هذه القيمة، تعمل "حزمة SDK للمشرف" تلقائيًا على فلترة الأحداث التي لم يحدّدها المستخدم.EVENTARC_CLOUD_EVENT_SOURCE
: معرّف مصدر الحدث على السحابة الإلكترونية تُرسِل IDE SDK هذه القيمة تلقائيًا في حقلsource
من IDE events. لا تحتاج عادةً إلى استخدام هذا المتغيّر بشكل صريح.
إذا لم يتم تفعيل الأحداث عند التثبيت، ستكون هذه المتغيّرات غير محدّدة. يمكنك استخدام هذه المعلومة لإعداد قناة حدث فقط عند تفعيل الأحداث:
import * as admin from "firebase-admin"; import {getEventarc} from 'firebase-admin/eventarc'; admin.initializeApp(); // Set eventChannel to a newly-initialized channel, or `undefined` if events // aren't enabled. const eventChannel = process.env.EVENTARC_CHANNEL && getEventarc().channel(process.env.EVENTARC_CHANNEL, { allowedEventTypes: process.env.EXT_SELECTED_EVENTS, });
انشر الأحداث على القناة في النقاط ضمن إضافتك التي تريد عرضها للمستخدمين. على سبيل المثال:
// If events are enabled, publish a `complete` event to the configured // channel. eventChannel && eventChannel.publish({ type: 'firebase.extensions.storage-resize-images.v1.complete', subject: filename, // the name of the original file data: { // ... } });
سجِّل الأحداث التي تنشرها في ملف PREINSTALL أو POSTINSTALL .
بالنسبة إلى كل حدث، سجِّل ما يلي:
- الغرض المقصود
- النقطة في منطق الإضافة التي يتم فيها تشغيلها
- بيانات الإخراج التي تتضمّنها
- شروط تنفيذه
بالإضافة إلى ذلك، يجب تحذير المستخدمين من عدم اتّخاذ أي إجراءات في معالجات الأحداث التي قد تؤدي إلى تشغيل الإضافة نفسها، ما يؤدي إلى حلقة لانهائية.
عند نشر أحداث من إضافة، يمكن للمستخدمين نشر معالِجات الأحداث للاستجابة بمنطق مخصّص.
على سبيل المثال، يحذف المثال التالي الصورة الأصلية بعد تغيير حجمها. يُرجى العِلم أنّ مثال معالِج الأحداث هذا يستخدِم السمة subject
للحدث، والتي هي في هذه الحالة اسم الملف الأصلي للصورة.
exports.onimageresized = onCustomEventPublished(
"firebase.extensions.storage-resize-images.v1.complete",
(event) => {
logger.info("Received image resize completed event", event);
// For example, delete the original.
return admin.storage()
.bucket("my-project.appspot.com")
.file(event.subject)
.delete();
});
اطّلِع على عوامل تشغيل الأحداث المخصّصة للحصول على مزيد من المعلومات.
مثال
توفّر إضافة Resize Images الرسمية خطافًا غير متزامن من خلال النشر في Eventarc بعد تغيير حجم الصورة.
علامات الربط المتزامنة
عندما تريد تزويد المستخدمين بخطاف يجب إكماله بنجاح لكي تعمل إحدى وظائف الإضافة، استخدِم المخطّطات المتزامنة.
تستدعي ميزة الربط المتزامن دالة سحابة قابلة للاتّصال عبر بروتوكول HTTPS يحدّدها المستخدم وتنتظر اكتمالها (ربما مع قيمة معروضة) قبل المتابعة. يؤدي الخطأ في الدالة المقدَّمة من المستخدِم إلى حدوث خطأ في دالة الإضافة.
لعرض ربط متزامن:
أضِف مَعلمة إلى الإضافة تسمح للمستخدمين بضبطها باستخدام عنوان URL إلى دالة السحابة الإلكترونية المخصّصة. على سبيل المثال:
- param: PREPROCESSING_FUNCTION label: Pre-processing function URL description: > An HTTPS callable function that will be called to transform the input data before it is processed by this function. type: string example: https://us-west1-my-project-id.cloudfunctions.net/preprocessData required: false
في النقطة التي تريد فيها عرض الربط في الإضافة، استخدِم دالة باستخدام عنوان URL الخاص بها. على سبيل المثال:
const functions = require('firebase-functions/v1'); const fetch = require('node-fetch'); const preprocessFunctionURL = process.env.PREPROCESSING_FUNCTION; exports.yourFunctionName = functions.firestore.document("collection/{doc_id}") .onWrite((change, context) => { // PREPROCESSING_FUNCTION hook begins here. // If a preprocessing function is defined, call it before continuing. if (preprocessFunctionURL) { try { await fetch(preprocessFunctionURL); // Could also be a POST request if you want to send data. } catch (e) { // Preprocessing failure causes the function to fail. functions.logger.error("Preprocessor error:", e); return; } } // End of PREPROCESSING_FUNCTION hook. // Main function logic follows. // ... });
سجِّل أيّ عمليات ربط تقدّمها في ملف PREINSTALL أوملف POSTINSTALL.
بالنسبة إلى كلّ ربط، سجِّل ما يلي:
- الغرض المقصود
- النقطة في منطق الإضافة التي يتم فيها تشغيلها
- المدخلات والمخرجات المتوقعة
- الشروط (أو الخيارات) لتنفيذه
بالإضافة إلى ذلك، يجب تحذير المستخدمين من عدم اتّخاذ أي إجراءات في وظيفة الربط قد تؤدي إلى تشغيل الإضافة نفسها، ما يؤدي إلى حلقة لانهائية.
مثال
توفّر إضافة Algolia Search خطافًا متزامنًا للاتّصال بوظيفة تحويل يقدّمها المستخدم قبل الكتابة إلى Algolia.