Firebase 快訊觸發條件

Firebase 可以針對各種專案和應用程式管理事件提供快訊。以下是一些 Firebase 傳送這類快訊的時間點範例:

  • 針對 Crashlytics,如果應用程式的當機情況大幅增加,我們會向您發出快訊。
  • 針對 Performance Monitoring,我們會在應用程式的啟動時間超過設定的門檻時傳送快訊。
  • 針對應用程式發布,我們會在某位測試人員註冊新的 iOS 裝置時通知您。

Firebase 會根據快訊和專案成員設定的偏好設定,在 Firebase 控制台顯示或透過電子郵件傳送這些快訊。

本頁面說明如何在 Cloud Functions for Firebase (第 2 代) 中編寫處理快訊事件的函式。

運作原理

您可以觸發函式,以回應以下來源發出的快訊事件:

在一般生命週期中,快訊事件觸發的函式會執行以下操作:

  1. 監聽/等待 Firebase 發送的特定快訊類型。
  2. 發出快訊時觸發,並接收包含事件特定資訊的事件酬載。
  3. 叫用函式的程式碼來處理事件酬載。

在快訊事件中觸發函式

使用 firebase-functions/v2/alerts 子套件編寫用於處理快訊事件的函式。以下產品專屬範例示範了函式在從 Firebase 發出產品快訊時,使用 Webhook 將訊息發布至 Discord 管道的工作流程。

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

最後,函式會透過 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(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()

最後,函式會透過 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(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 快訊參考說明文件。

處理應用程式發布快訊事件

本節範例說明如何為新的測試人員 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()

最後,函式會透過 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(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」。