Firebase には、さまざまなプロジェクトやアプリ管理イベントに対応するアラートが用意されています。Firebase でこのようなアラートを送信できるイベントの例を次に示します。
- Crashlytics では、アプリのクラッシュが急増した場合にアラートが通知されます。
- Performance Monitoring では、アプリの起動時間が構成済みのしきい値を超えるとアラートが通知されます。
- App Distribution では、テスターが新しい iOS デバイスを登録した場合にアラートが通知されます。
Firebase では、アラートの種類やプロジェクト メンバーによる設定に応じて、アラートは Firebase コンソールに表示されるか、メールで送信されます。
このページでは、アラート イベントを処理する関数の作成方法について説明します。
仕組み
次のソースで生じたアラート イベントに対応して、関数をトリガーできます。
一般的なライフサイクルの場合、アラート イベントによってトリガーされる関数は以下のように機能します。
- Firebase から、特定の種類のアラートが生じるまでリッスン / 待機します。
- アラートが発生するとトリガーされて、イベントに関する特定の情報を含むイベント ペイロードを受信します。
- 関数のコードを呼び出して、イベント ペイロードを処理します。
アラート イベント発生時に関数をトリガーする
firebase-functions/v2/alerts
サブパッケージを使用して、アラート イベントを処理する関数を作成します。以下のプロダクト固有の例は、当該プロダクトに関するアラートが Firebase から出された場合に、関数で Webhook を使用して Discord チャネルにメッセージを投稿するワークフローを示しています。
Crashlytics アラート イベントを処理する
次の Crashlytics の例では、Cloud Functions for Firebase を使用して、致命的な新しいクラッシュの問題のアラート イベントを処理します。この関数は、アラート情報をメッセージにして 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 アラートのリファレンス ドキュメントをご覧ください。
Performance Monitoring アラート イベントを処理する
このセクションの例では、パフォーマンスしきい値アラートの関数を作成する方法を紹介しています。
この例では、パフォーマンスしきい値アラートが出されるたびに送信される、PerformanceEvent<ThresholdAlertPayload>
タイプのイベントをリッスンする Cloud Functions 関数を onThresholdAlertPublished
関数でエクスポートします。
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); }
キャプチャできるすべてのパフォーマンス アラート イベントについては、Performance Monitoring アラートのリファレンス ドキュメントをご覧ください。
App Distribution アラート イベントを処理する
このセクションの例では、テスターの新しい iOS デバイスのアラートの関数を作成する方法を紹介しています。
この例では、テスターが新しい iOS デバイスを登録するたびに送信される、AppDistributionEvent<NewTesterDevicePayload>
タイプのイベントをリッスンする Cloud Functions の関数を onNewTesterIosDevicePublished
関数でエクスポートします。新しい 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 アラートのリファレンス ドキュメントをご覧ください。
App Distribution のアプリ内フィードバック Firebase アラートによってトリガーされる関数の使用方法については、アプリ内フィードバックを Jira に送信するをご覧ください。