عوامل تشغيل تنبيهات Firebase

يوفّر Firebase تنبيهات لمجموعة كبيرة من أحداث إدارة المشاريع والتطبيقات. وفي ما يلي بعض الأمثلة على الأحداث التي يمكن أن يرسل فيها Firebase هذا النوع من التنبيهات:

  • بالنسبة إلى Crashlytics، يمكننا تنبيهك في حال حدوث زيادة كبيرة في عدد الأعطال في تطبيقك.
  • بالنسبة إلى "مراقبة الأداء"، يمكننا تنبيهك إذا تجاوز وقت بدء تشغيل تطبيقك الحدّ الذي تم ضبطه.
  • بالنسبة إلى ميزة App Distribution، يمكننا تنبيهك إذا سجّل أحد المختبِرين جهازًا جديدًا يعمل بنظام التشغيل iOS.

استنادًا إلى التنبيه والإعدادات المفضَّلة التي ضبطها عضو المشروع، يعرض Firebase هذه الأنواع من التنبيهات في وحدة تحكُّم Firebase أو يرسلها عبر البريد الإلكتروني.

توضّح هذه الصفحة كيفية كتابة دوال في Cloud Functions في Firebase (الجيل الثاني) تعالج أحداث التنبيهات.

ما هي آلية العمل؟

يمكنك تفعيل الوظائف استجابةً لأحداث التنبيهات الصادرة عن المصادر التالية:

في دورة الحياة النموذجية، تؤدي الدالة التي يتم تشغيلها بواسطة حدث تنبيه ما يلي:

  1. ينتظر/ينتظر وصول نوع تنبيه معيّن من Firebase.
  2. يتم تشغيله عند إطلاق التنبيه وتلقّي حمولة البيانات التي تحتوي على معلومات محدّدة عن الحدث.
  3. لاستدعاء رمز الدالة للتعامل مع حمولة الحدث.

تشغيل دالة عند أحداث التنبيه

استخدِم الحزمة الفرعية firebase-functions/v2/alerts لكتابة دالة تعالج التنبيهات بشأن الأحداث. توضّح الأمثلة التالية الخاصة بالمنتجات خطوات عمل تستخدم فيه دالة ردّ تلقائي على الويب لنشر رسالة على قناة Discord عند إصدار تنبيه من Firebase.

التعامل مع حدث تنبيه Crashlytics

في مثال Crashlytics التالي، يمكنك استخدام دوال Cloud لبرنامج Firebase للتعامل مع حدث تنبيه بمشكلة تعطُّل فادحة جديدة. تنشر هذه الوظيفة معلومات التنبيه في رسالة إلى قناة Discord

مثال على إشعار الأعطال في Discord

مثال على إشعار بشأن مشكلة فادحة جديدة

تنتبه الدالة إلى الحدث المقابل لـ Firebase الذي يؤدي إلى نشر مشكلة فادحة جديدة:

Node.js

exports.postfatalissuetodiscord = onNewFatalIssuePublished(async (event) => {

Python

@crashlytics_fn.on_new_fatal_issue_published(secrets=["DISCORD_WEBHOOK_URL"])
def post_fatal_issue_to_discord(event: crashlytics_fn.CrashlyticsNewFatalIssueEvent) -> None:
    """Publishes a message to Discord whenever a new Crashlytics fatal issue occurs."""

بعد ذلك تحلّل الدالة كائن الحدث المعروض، وتحلّل المعلومات المفيدة من حمولة الحدث وإنشاء رسالة لنشرها على قناة Discord:

Node.js

  // construct a helpful message to send to Discord
  const appId = event.appId;
  const {id, title, subtitle, appVersion} = event.data.payload.issue;
  const message = `
🚨 New fatal issue for ${appId} in version ${appVersion} 🚨

**${title}**

${subtitle}

id: \`${id}\`
`;

Python

    # Construct a helpful message to send to Discord.
    app_id = event.app_id
    issue = event.data.payload.issue
    message = f"""
🚨 New fatal issue for {app_id} in version {issue.app_version} 🚨

# {issue.title}

{issue.subtitle}

ID: `{issue.id}`
""".strip()

أخيرًا، ترسل الدالة الرسالة التي تم إنشاؤها إلى Discord من خلال طلب HTTP:

Node.js

const response = await postMessageToDiscord("Crashlytics Bot", message);
if (response.ok) {
  logger.info(
      `Posted fatal Crashlytics alert ${id} for ${appId} to Discord`,
      event.data.payload,
  );
} else {
  throw new Error(response.error);
}

Python

response = post_message_to_discord("Crashlytics Bot", message, DISCORD_WEBHOOK_URL.value)
if response.ok:
    print(f"Posted fatal Crashlytics alert {issue.id} for {app_id} to Discord.")
    pprint.pp(event.data.payload)
else:
    response.raise_for_status()

للتعرّف على جميع أحداث تنبيهات Crashlytics التي يمكنك تسجيلها، انتقِل إلى المستندات المرجعية لتنبيهات Crashlytics.

التعامل مع حدث تنبيه "مراقبة الأداء"

يصدِّر هذا المثال دالة تراقب أحداث التنبيهات المتعلّقة بالحد الأدنى للأداء:

Node.js

exports.postperformancealerttodiscord = onThresholdAlertPublished(
    async (event) => {

Python

@performance_fn.on_threshold_alert_published(secrets=["DISCORD_WEBHOOK_URL"])
def post_performance_alert_to_discord(event: performance_fn.PerformanceThresholdAlertEvent) -> None:
    """Publishes a message to Discord whenever a performance threshold alert is fired."""

بعد ذلك تحلّل الدالة كائن الحدث المعروض، وتحلّل المعلومات المفيدة من حمولة الحدث وإنشاء رسالة لنشرها على قناة Discord:

Node.js

      // construct a helpful message to send to Discord
      const appId = event.appId;
      const {
        eventName,
        metricType,
        eventType,
        numSamples,
        thresholdValue,
        thresholdUnit,
        conditionPercentile,
        appVersion,
        violationValue,
        violationUnit,
        investigateUri,
      } = event.data.payload;
      const message = `
    ⚠️ Performance Alert for ${metricType} of ${eventType}: **${eventName}** ⚠️
    
    App id: ${appId}
    Alert condition: ${thresholdValue} ${thresholdUnit}
    Percentile (if applicable): ${conditionPercentile}
    App version (if applicable): ${appVersion}
    
    Violation: ${violationValue} ${violationUnit}
    Number of samples checked: ${numSamples}
    
    **Investigate more:** ${investigateUri}
    `;

Python

    # Construct a helpful message to send to Discord.
    app_id = event.app_id
    perf = event.data.payload
    message = f"""
⚠️ Performance Alert for {perf.metric_type} of {perf.event_type}: **{perf.event_name}** ⚠️

App ID: {app_id}
Alert condition: {perf.threshold_value} {perf.threshold_unit}
Percentile (if applicable): {perf.condition_percentile}
App version (if applicable): {perf.app_version}

Violation: {perf.violation_value} {perf.violation_unit}
Number of samples checked: {perf.num_samples}

**Investigate more:** {perf.investigate_uri}
""".strip()

أخيرًا، ترسل الدالة الرسالة التي تم إنشاؤها إلى Discord من خلال طلب HTTP:

Node.js

const response = await postMessageToDiscord(
    "Firebase Performance Bot", message);
if (response.ok) {
  logger.info(
      `Posted Firebase Performance alert ${eventName} to Discord`,
      event.data.payload,
  );
} else {
  throw new Error(response.error);
}

Python

response = post_message_to_discord("App Performance Bot", message,
                                   DISCORD_WEBHOOK_URL.value)
if response.ok:
    print(f"Posted Firebase Performance alert {perf.event_name} to Discord.")
    pprint.pp(event.data.payload)
else:
    response.raise_for_status()

للتعرّف على جميع أحداث تنبيه الأداء التي يمكنك تسجيلها، انتقِل إلى المستندات المرجعية الخاصة بتنبيهات "مراقبة الأداء".

التعامل مع حدث تنبيه توزيع التطبيقات

يوضح المثال في هذا القسم كيفية كتابة دالة لتنبيهات أجهزة iOS المختبِرة الجديدة.

في هذا المثال، تستمع الدالة إلى الأحداث التي يتم إرسالها في كل مرة يسجِّل فيها مختبِرًا جهازًا جديدًا يعمل بنظام التشغيل iOS. عند تسجيل جهاز iOS جديد، يلزمك تحديث ملفك الشخصي لتوفير المتطلبات اللازمة باستخدام المعرّف الفريد للجهاز لهذا الجهاز ثم إعادة توزيع التطبيق.

Node.js

exports.postnewduuidtodiscord = onNewTesterIosDevicePublished(async (event) => {

Python

@app_distribution_fn.on_new_tester_ios_device_published(secrets=["DISCORD_WEBHOOK_URL"])
def post_new_udid_to_discord(event: app_distribution_fn.NewTesterDeviceEvent) -> None:
    """Publishes a message to Discord whenever someone registers a new iOS test device."""

بعد ذلك تحلّل الدالة العنصر المعروض، وتحلّل المعلومات المفيدة من حمولة الحدث وتنشئ رسالة لنشرها على قناة Discord:

Node.js

  // construct a helpful message to send to Discord
  const appId = event.appId;
  const {
    testerDeviceIdentifier,
    testerDeviceModelName,
    testerEmail,
    testerName,
  } = event.data.payload;
  const message = `
📱 New iOS device registered by ${testerName} <${testerEmail}> for ${appId}

UDID **${testerDeviceIdentifier}** for ${testerDeviceModelName}
`;

Python

    # Construct a helpful message to send to Discord.
    app_id = event.app_id
    app_dist = event.data.payload
    message = f"""
📱 New iOS device registered by {app_dist.tester_name} <{app_dist.tester_email}> for {app_id}

UDID **{app_dist.tester_device_identifier}** for {app_dist.tester_device_model_name}
""".strip()

أخيرًا، ترسل الدالة الرسالة التي تم إنشاؤها إلى Discord من خلال طلب HTTP:

Node.js

const response = await postMessageToDiscord("AppDistribution Bot", message);
if (response.ok) {
  logger.info(
      `Posted iOS device registration alert for ${testerEmail} to Discord`,
  );
} else {
  throw new Error(response.error);
}

Python

response = post_message_to_discord("App Distro Bot", message, DISCORD_WEBHOOK_URL.value)
if response.ok:
    print(f"Posted iOS device registration alert for {app_dist.tester_email} to Discord.")
    pprint.pp(event.data.payload)
else:
    response.raise_for_status()

للتعرّف على جميع أحداث تنبيهات "توزيع التطبيقات" التي يمكنك تسجيلها، انتقِل إلى المستندات المرجعية الخاصة بتنبيهات توزيع التطبيقات.

للتعرّف على كيفية استخدام دالة يتم تشغيلها من خلال تنبيه Firebase الخاص بالتعليقات داخل التطبيق من ميزة "توزيع التطبيقات"، يمكنك الاطّلاع على إرسال ملاحظات داخل التطبيق إلى Jira.