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

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

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

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

توضّح هذه الصفحة كيفية كتابة دوال في وظائف السحابة الإلكترونية لبرنامج 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 جديد، عليك تحديث الملف الشخصي لإدارة الحسابات باستخدام 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()

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

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