Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Firebase 警報觸發器

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

Firebase 為範圍廣泛的項目和應用程序管理事件提供警報。以下是 Firebase 何時可以向您發送此類警報的一些示例事件:

  • 對於 Crashlytics,如果您的應用程序崩潰次數急劇增加,我們會提醒您。
  • 對於性能監控,如果您的應用程序的啟動時間超過您配置的閾值,我們會提醒您。
  • 對於 App Distribution,如果您的測試人員之一註冊了新的 iOS 設備,我們會提醒您。

根據警報和項目成員設置的首選項,Firebase 在 Firebase 控制台中顯示這些類型的警報或通過電子郵件發送它們。

本頁介紹如何編寫處理警報事件的函數。

它是如何工作的?

您可以觸發函數以響應這些來源發出的警報事件:

在典型的生命週期中,由警報事件觸發的函數執行以下操作:

  1. 偵聽/等待從 Firebase 發出的特定警報類型。
  2. 在發出警報時觸發,並接收包含有關事件的特定信息的事件有效負載。
  3. 調用您的函數代碼來處理事件負載。

觸發警報事件的功能

使用firebase-functions/v2/alerts子包編寫處理警報事件的函數。以下特定於產品的示例演示了一個工作流程,其中當從 Firebase 發出該產品的警報時,函數使用 webhook 將消息發佈到 Discord 頻道。

處理 Crashlytics 警報事件

對於以下 Crashlytics 示例,您使用 Cloud Functions for Firebase 來處理新的致命崩潰問題的警報事件。此函數將消息中的警報信息發佈到 Discord 頻道。

Discord 中的崩潰通知示例

新的致命崩潰問題的示例通知

該函數監聽onNewFatalIssuePublished事件:

exports.postfatalissuetodiscord = onNewFatalIssuePublished(async (event) => {

然後該函數解析返回的事件對象,構造一條消息以發佈到 Discord 頻道:

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

最後,該函數將構建的消息發送到 Discord:

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

要了解您可以捕獲的所有 Crashlytics 警報事件,請轉到Crashlytics 警報的參考文檔。

處理性能監控警報事件

本節中的示例向您展示如何編寫性能閾值警報函數。

在此示例中,在onThresholdAlertPublished函數上導出了一個雲函數,該函數偵聽類型為PerformanceEvent<ThresholdAlertPayload>的事件,每次觸發性能閾值警報時都會發送該事件:

exports.postperformancealerttodiscord = onThresholdAlertPublished(
    async (event) => {

然後該函數解析返回的事件對象,解析來自事件有效負載的有用信息並構建消息以發佈到 Discord 頻道:

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

最後,該函數通過 HTTP 請求將構建的消息發送到 Discord:

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

要了解您可以捕獲的所有性能警報事件,請轉到性能監控警報的參考文檔。

處理 App Distribution 警報事件

本節中的示例向您展示瞭如何為新測試器 iOS 設備警報編寫函數。

在此示例中, onNewTesterIosDevicePublished函數導出一個雲函數,用於偵聽AppDistributionEvent<NewTesterDevicePayload>類型的事件,每次測試人員註冊新的 iOS 設備時都會發送該事件。註冊新的 iOS 設備時,您需要使用該設備的 UDID 更新您的配置文件,然後重新分發該應用程序。

exports.postnewduuidtodiscord = onNewTesterIosDevicePublished(async (event) => {

然後該函數解析返回的、解析來自事件有效負載的有用信息並構造一條消息以發佈到 Discord 頻道:

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

最後,該函數通過 HTTP 請求將構建的消息發送到 Discord:

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

要了解您可以捕獲的所有 App Distribution 警報事件,請轉到App Distribution 警報的參考文檔。