Firebase 알림 트리거

Firebase는 다양한 프로젝트 및 앱 관리 이벤트에 대한 알림을 제공합니다. 다음은 Firebase에서 이러한 유형의 알림을 보낼 수 있는 몇 가지 예시 이벤트입니다.

  • Crashlytics의 경우 앱의 구독자 수가 급격하게 증가하면 알림이 전송됩니다 비정상 종료됩니다.
  • Performance Monitoring의 경우 앱 시작 시간이 구성할 수 있습니다
  • App Distribution의 경우 테스터 중 한 명이 새 iOS를 등록하면 알림을 받을 수 있습니다. 있습니다.

알림 및 프로젝트에서 설정한 환경설정에 따라 다름 구성원 Firebase에서 Firebase 콘솔에 이러한 유형의 알림을 표시하거나 전송합니다. 이메일을 통해 수집하세요.

이 페이지에서는 Cloud Functions for Firebase (2세대)에서 함수를 작성하는 방법을 설명합니다. 경보 이벤트를 처리하는 장치입니다

기본 원리

다음 소스에서 내보낸 알림 이벤트에 대한 응답으로 함수를 트리거할 수 있습니다.

일반적인 수명 주기에서 알림 이벤트에 의해 트리거되는 함수는 다음을 수행합니다.

  1. Firebase에서 내보낼 특정 알림 유형을 리슨하거나 대기합니다.
  2. 알림을 내보낼 때 트리거하고 이벤트에 대한 특정 정보가 포함된 이벤트 페이로드를 수신합니다.
  3. 함수 코드를 호출하여 이벤트 페이로드를 처리합니다.

알림 이벤트 발생 시 함수 트리거

firebase-functions/v2/alerts 하위 패키지를 사용하여 알림 이벤트를 처리하는 함수를 작성합니다. 다음 제품별 예시에서는 Firebase에서 제품 알림을 내보낼 때 함수가 웹훅을 사용하여 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.

App Distribution 알림 이벤트 처리

이 섹션의 예시에서는 새 테스터 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()

캡처할 수 있는 모든 App Distribution 알림 이벤트에 대한 자세한 내용은 다음을 참고하세요. 자세한 내용은 알림 App Distribution.

특정 이벤트에 의해 트리거되는 함수를 사용하는 방법을 알아보려면 App Distribution의 인앱 의견 Firebase 알림 Jira에 인앱 의견 보내기를 참고하세요.