Pemicu Pemberitahuan Firebase

Firebase menyediakan pemberitahuan untuk berbagai peristiwa pengelolaan aplikasi dan project. Berikut adalah beberapa contoh peristiwa kapan Firebase dapat mengirimkan jenis pemberitahuan ini:

  • Untuk Crashlytics, kami dapat mengirimkan pemberitahuan jika aplikasi Anda mengalami peningkatan error secara drastis.
  • Untuk Performance Monitoring, kami dapat mengirimkan pemberitahuan jika waktu mulai aplikasi Anda melewati nilai batas yang dikonfigurasi.
  • Untuk App Distribution, kami dapat mengirimkan pemberitahuan jika salah satu penguji mendaftarkan perangkat iOS baru.

Bergantung pada pemberitahuan dan preferensi yang ditetapkan anggota project, Firebase menampilkan jenis-jenis pemberitahuan ini di Firebase console atau mengirimkannya melalui email.

Halaman ini menjelaskan cara menulis fungsi di Cloud Functions for Firebase (generasi ke-2) yang menangani peristiwa pemberitahuan.

Bagaimana cara kerjanya?

Anda dapat memicu fungsi sebagai respons terhadap peristiwa pemberitahuan yang dikeluarkan oleh sumber berikut:

Dalam siklus proses umum, fungsi yang dipicu oleh peristiwa pemberitahuan akan melakukan hal-hal berikut:

  1. Mendeteksi/menunggu jenis pemberitahuan tertentu yang akan dikeluarkan Firebase.
  2. Memicu fungsi saat pemberitahuan dikeluarkan, dan menerima payload peristiwa yang berisi informasi spesifik tentang peristiwa tersebut.
  3. Memanggil kode fungsi Anda untuk menangani payload peristiwa.

Memicu fungsi saat terjadi peristiwa pemberitahuan

Gunakan subpaket firebase-functions/v2/alerts untuk menulis fungsi yang menangani peristiwa pemberitahuan. Contoh spesifik per produk berikut menunjukkan alur kerja di mana sebuah fungsi menggunakan webhook untuk memposting pesan ke saluran Discord saat Firebase mengeluarkan pemberitahuan untuk produk tersebut.

Menangani peristiwa pemberitahuan Crashlytics

Untuk contoh Crashlytics berikut, Anda menggunakan Cloud Functions for Firebase untuk menangani peristiwa pemberitahuan masalah error fatal baru. Fungsi ini memposting informasi pemberitahuan dalam pesan ke saluran Discord.

Contoh notifikasi error di Discord

Contoh notifikasi untuk masalah error fatal baru

Fungsi ini mendeteksi peristiwa yang berkaitan dengan Firebase yang akan memublikasikan masalah fatal baru:

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

Fungsi ini kemudian mengurai objek peristiwa yang ditampilkan, dengan mengurai informasi yang berguna dari payload peristiwa dan membuat pesan yang akan diposting ke saluran 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()

Terakhir, fungsi tersebut mengirimkan pesan yang telah dibuat ke Discord melalui permintaan HTTP:

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

Untuk mempelajari semua peristiwa pemberitahuan Crashlytics yang dapat Anda tangkap, buka dokumentasi referensi untuk pemberitahuan Crashlytics.

Menangani peristiwa pemberitahuan Performance Monitoring

Contoh ini mengekspor fungsi yang memproses peristiwa pemberitahuan nilai minimum performa:

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

Fungsi ini kemudian mengurai objek peristiwa yang ditampilkan, dengan mengurai informasi yang berguna dari payload peristiwa dan membuat pesan yang akan diposting ke saluran 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()

Terakhir, fungsi tersebut mengirimkan pesan yang telah dibuat ke Discord melalui permintaan HTTP:

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

Untuk mempelajari semua peristiwa pemberitahuan performa yang dapat Anda tangkap, buka dokumentasi referensi untuk pemberitahuan Performance Monitoring.

Menangani peristiwa pemberitahuan App Distribution

Contoh di bagian ini menunjukkan cara menulis fungsi untuk pemberitahuan perangkat iOS penguji baru.

Dalam contoh ini, fungsi memproses peristiwa yang dikirim setiap kali penguji mendaftarkan perangkat iOS baru. Saat perangkat iOS baru didaftarkan, Anda perlu memperbarui profil penyediaan dengan UDID perangkat tersebut, lalu mendistribusikan ulang aplikasi.

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

Fungsi ini kemudian mengurai objek peristiwa yang ditampilkan, dengan mengurai informasi yang berguna dari payload peristiwa dan membuat pesan yang akan diposting ke saluran 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()

Terakhir, fungsi tersebut mengirimkan pesan yang telah dibuat ke Discord melalui permintaan HTTP:

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

Untuk mempelajari semua peristiwa pemberitahuan App Distribution yang dapat Anda tangkap, buka dokumentasi referensi untuk pemberitahuan App Distribution.

Untuk mempelajari cara menggunakan fungsi yang dipicu oleh pemberitahuan Firebase mengenai masukan dalam aplikasi dari App Distribution, lihat Mengirim masukan dalam aplikasi ke Jira.