Firebase çok çeşitli proje ve uygulama yönetimi etkinlikleri için uyarılar sağlar. Aşağıda, Firebase'in size bu tür uyarıları gönderebileceği durumlara dair birkaç örnek verilmiştir:
- Crashlytics için, uygulamanızdaki kilitlenme sayısında önemli bir artış olursa sizi uyarabiliriz.
- Performance Monitoring için, uygulamanızın başlatma süresi yapılandırılmış eşiğinizi aşarsa sizi uyarabiliriz.
- App Distribution için, test kullanıcılarınızdan biri yeni bir iOS cihazı kaydederse sizi uyarabiliriz.
Firebase, uyarıya ve proje üyesi tarafından ayarlanan tercihlere bağlı olarak bu tür uyarıları Firebase konsolunda gösterir veya bunları e-posta yoluyla 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?
Şu kaynaklar tarafından yayınlanan uyarı etkinliklerine yanıt olarak işlevleri tetikleyebilirsiniz:
- App Distribution uyarı etkinliğini işleme
- Crashlytics uyarı etkinliğini işleme
- Performans İzleme uyarı etkinliğini işleme
Tipik bir yaşam döngüsünde, bir uyarı etkinliği tarafından tetiklenen bir işlev şunları yapar:
- Firebase'den belirli bir uyarı türünün yayınlanmasını dinler/bekler.
- Uyarı yayınlandığında tetiklenir ve etkinlik hakkında belirli bilgileri içeren etkinlik yükünü alır.
- 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 özgü örneklerde, 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ışı gösterilmektedir.
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 mesajda Discord kanalına yayınlar.
İşlev, Firebase'e karşılık gelen etkinliği dinleyerek yeni bir önemli sorun yayınlar:
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, döndürülen etkinlik nesnesini ayrıştırarak yararlı bilgileri etkinlik yükünden 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ı ile ilgili referans belgeleri inceleyin.
Performance Monitoring uyarı etkinliğini işleme
Bu örnekte, performans eşiği uyarı etkinliklerini işleyen 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, döndürülen etkinlik nesnesini ayrıştırarak etkinlik yükündeki yararlı 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 aracılığıyla 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 Performans İzleme uyarıları ile ilgili referans belgeleri inceleyin.
App Distribution uyarı etkinliğini işleme
Bu bölümdeki örnekte, yeni test kullanıcısı iOS cihaz uyarıları için nasıl işlev yazılacağı gösterilmektedir.
Bu örnekte, işlev test kullanıcısı yeni bir iOS cihazı her kaydettiğinde gönderilen etkinlikleri işler. Yeni bir iOS cihazı kaydedildiğinde temel hazırlık profilinizi söz konusu 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ırarak etkinlik yükündeki yararlı 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 aracılığıyla 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ı'nın referans belgelerine gidin.
App Distribution'dan uygulama içi geri bildirim Firebase uyarısı tarafından tetiklenen bir işlevi nasıl kullanacağınızı öğrenmek için Jira'ya uygulama içi geri bildirim gönderme bölümünü inceleyin.