Firebase Uyarıları tetikleyicileri

Firebase, çok çeşitli proje ve uygulama yönetimi etkinlikleri için uyarılar sağlar. Firebase'in size bu tür uyarılar gönderebileceği birkaç örnek etkinlik aşağıda verilmiştir:

  • Crashlytics'te, uygulamanızdaki kilitlenmelerde önemli bir artış olursa sizi uyarabiliriz.
  • Performance Monitoring söz konusu olduğunda, uygulamanızın başlatma süresi yapılandırılmış eşiğinizi aşarsa sizi uyarabiliriz.
  • App Distribution'da, test kullanıcılarınızdan biri yeni bir iOS cihazı kaydederse sizi uyarabiliriz.

Firebase, uyarıya ve proje üyesi tarafından belirlenen tercihlere bağlı olarak bu tür uyarıları Firebase konsolunda gösterir veya e-posta ile gönderir.

Bu sayfada, Cloud Functions for Firebase'de (2. nesil) uyarı etkinliklerini işleyen işlevlerin nasıl yazılacağı açıklanmaktadır.

Nasıl çalışır?

İşlevleri, aşağıdaki kaynakların yayınladığı uyarı etkinliklerine göre tetikleyebilirsiniz:

Tipik bir yaşam döngüsünde, bir uyarı etkinliği tarafından tetiklenen bir işlev aşağıdakileri yapar:

  1. Firebase'den belirli bir uyarı türünün yayınlanmasını dinler/bekler.
  2. Uyarı yayınlandığında tetiklenir ve etkinlik hakkında belirli bilgileri içeren etkinlik yükünü alır.
  3. Etkinlik yükünü işlemek için işlevinizin kodunu çağırır.

Uyarı etkinliklerinde bir işlevi tetikleme

Uyarı etkinliklerini işleyen bir işlev yazmak için firebase-functions/v2/alerts alt paketini kullanın. Aşağıdaki ürüne özel örnekler, Firebase'den bir ürünle ilgili uyarı yayınlandığında işlevin Discord kanalına mesaj yayınlamak için webhook kullandığı bir iş akışını göstermektedir.

Crashlytics uyarı etkinliğini işleme

Aşağıdaki Crashlytics örneğinde, yeni bir önemli kilitlenme sorunuyla ilgili uyarı etkinliğini işlemek için Cloud Functions for Firebase'i kullanırsınız. Bu işlev, uyarı bilgilerini bir iletiyle Discord kanalına yayınlar.

Discord'da kilitlenme bildirimi örneği

Yeni bir önemli kilitlenme sorunu için örnek bildirim

İşlev, yeni bir önemli sorun yayınlayan Firebase'e karşılık gelen etkinliği dinler:

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."""

İşlev daha sonra döndürülen etkinlik nesnesini ayrıştırır, etkinlik yükündeki faydalı bilgileri ayrıştırır ve Discord kanalına gönderilecek bir mesaj oluşturur:

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

Son olarak işlev, oluşturulan mesajı bir HTTP isteği aracılığıyla Discord'a gönderir:

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

Yakalayabileceğiniz tüm Crashlytics uyarı etkinlikleri hakkında bilgi edinmek için Crashlytics uyarıları referans belgelerine gidin.

Performans İzleme uyarı etkinliğini işleme

Bu örnekte, performans eşiği uyarı etkinliklerini dinleyen bir işlev dışa aktarılır:

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."""

İşlev daha sonra döndürülen etkinlik nesnesini ayrıştırır, etkinlik yükündeki faydalı bilgileri ayrıştırır ve Discord kanalına gönderilecek bir mesaj oluşturur:

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

Son olarak, işlev oluşturulan mesajı bir HTTP isteği üzerinden Discord'a gönderir:

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

Yakalayabileceğiniz tüm performans uyarısı etkinlikleri hakkında bilgi edinmek için Performance Monitoring uyarıları referans belgelerine gidin.

Uygulama Dağıtımı uyarı etkinliğini işleme

Bu bölümdeki örnekte, yeni test kullanıcısı iOS cihaz uyarıları için bir işlevin nasıl yazılacağı gösterilmektedir.

Bu örnekte işlev, test kullanıcısı yeni bir iOS cihazı her kaydettirdiğinde gönderilen etkinlikleri dinler. Yeni bir iOS cihaz kaydolduğunda temel hazırlık profilinizi bu cihazın UDID'si ile güncellemeniz ve ardından uygulamayı yeniden dağıtmanız gerekir.

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."""

İşlev daha sonra döndürülen nesneyi ayrıştırır, etkinlik yükündeki faydalı bilgileri ayrıştırır ve Discord kanalına gönderilecek bir mesaj oluşturur:

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

Son olarak, işlev oluşturulan mesajı bir HTTP isteği üzerinden Discord'a gönderir:

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

Yakalayabileceğiniz tüm App Distribution uyarı etkinlikleri hakkında bilgi edinmek için App Distribution uyarıları referans belgelerine gidin.

App Distribution'daki uygulama içi geri bildirim Firebase uyarısının tetiklediği bir işlevin nasıl kullanılacağını öğrenmek için Jira'ya uygulama içi geri bildirim gönderme bölümüne bakın.