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:
- Menangani peristiwa pemberitahuan App Distribution
- Menangani peristiwa pemberitahuan Crashlytics
- Menangani peristiwa pemberitahuan Performance Monitoring
Dalam siklus proses umum, fungsi yang dipicu oleh peristiwa pemberitahuan akan melakukan hal-hal berikut:
- Mendeteksi/menunggu jenis pemberitahuan tertentu yang akan dikeluarkan Firebase.
- Memicu fungsi saat pemberitahuan dikeluarkan, dan menerima payload peristiwa yang berisi informasi spesifik tentang peristiwa tersebut.
- 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.
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.