راه‌اندازی هشدارهای 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) => {

پایتون

@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}\`
`;

پایتون

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

درنهایت، تابع پیام ساخته‌شده را ازطریق درخواست HTTP به Discord ارسال می‌کند:

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}`);
}

پایتون

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) => {

پایتون

@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}
    `;

پایتون

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

درنهایت، تابع پیام ساخته‌شده را ازطریق درخواست HTTP به Discord ارسال می‌کند:

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}`);
}

پایتون

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) => {

پایتون

@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}
`;

پایتون

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

درنهایت، تابع پیام ساخته‌شده را ازطریق درخواست HTTP به Discord ارسال می‌کند:

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}`);
}

پایتون

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 مراجعه کنید.