مشغِّلات تنبيهات Firebase

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

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

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

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

كيف تعمل هذه الميزة؟

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

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

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

بدء دالة عند وقوع أحداث تنبيه

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

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

في مثال Crashlytics التالي، يمكنك استخدام Cloud Functions for 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.

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

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

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()

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

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

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

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

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()

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

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