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

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

處理應用分發警報事件

本節中的示例向您展示瞭如何為新測試員 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);
    }

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