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

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

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

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

توضِّح هذه الصفحة كيفية كتابة الدوال في 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(`Discord returned status code ${response.status}`);
}

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(`Discord returned status code ${response.status}`);
}

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(`Discord returned status code ${response.status}`);
}

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.