Firebase, çok çeşitli proje ve uygulama yönetimi etkinlikleri için uyarı sağlar. Firebase'in size bu tür bir uyarı gönderebileceği durumlara ilişkin birkaç örnek olayı burada bulabilirsiniz:
- Crashlytics olarak, uygulamanızın kilitlenme sayısında ciddi bir artış olması durumunda sizi uyarabiliriz.
- Performans İzleme için, uygulamanızın başlatma süresinin yapılandırılmış eşiğinizi aşması durumunda sizi uyarabiliriz.
- Uygulama Dağıtımı için, test kullanıcılarınızdan birinin yeni bir iOS cihazı kaydettirmesi durumunda sizi uyarabiliriz.
Uyarıya ve proje üyesi tarafından belirlenen tercihlere bağlı olarak Firebase, bu tür uyarıları Firebase konsolunda gösterir veya e-postayla gönderir.
Bu sayfada Cloud Functions for Firebase'de (2. nesil) uyarı olaylarını işleyen işlevlerin nasıl yazılacağı açıklanmaktadır.
O nasıl çalışır?
Şu kaynakların yaydığı uyarı olaylarına yanıt olarak işlevleri tetikleyebilirsiniz:
- Bir Uygulama Dağıtımı uyarı olayını işleme
- Bir Crashlytics uyarı olayını işleme
- Performans İzleme uyarı olayını işleme
Tipik bir yaşam döngüsünde, bir uyarı olayı tarafından tetiklenen bir işlev aşağıdakileri yapar:
- Firebase'den belirli bir uyarı türünün yayınlanmasını dinler/bekler.
- Uyarı yayınlandığında tetiklenir ve olayla ilgili belirli bilgileri içeren olay yükünü alır.
- Olay yükünü işlemek için işlevinizin kodunu çağırır.
Uyarı olaylarında bir işlevi tetikleyin
Uyarı olaylarını 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 söz konusu ürün için bir uyarı yayınlandığında bir işlevin Discord kanalına mesaj göndermek için web kancasını kullandığı bir iş akışını göstermektedir.
Bir Crashlytics uyarı olayını işleme
Aşağıdaki Crashlytics örneğinde, yeni bir ölümcül kilitlenme sorununa ilişkin uyarı olayını yönetmek için Cloud Functions for Firebase'i kullanıyorsunuz. Bu işlev, uyarı bilgilerini bir mesajla Discord kanalına gönderir.
İşlev, Firebase'in yeni bir önemli sorun yayınlamasına karşılık gelen olayı 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 olay nesnesini ayrıştırır, olay yükünden 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 {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ına ilişkin referans belgelere gidin.
Performans İzleme uyarı olayını işleme
Bu örnek, performans eşiği uyarı olaylarını dinleyen bir işlevi dışa aktarı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 olay nesnesini ayrıştırır, olay yükünden 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ı olayları hakkında bilgi edinmek için Performans İzleme uyarılarına ilişkin referans belgelere gidin.
Bir Uygulama Dağıtımı uyarı olayını işleme
Bu bölümdeki örnek, yeni test cihazı iOS cihazı uyarıları için bir fonksiyonun nasıl yazılacağını gösterir.
Bu örnekte işlev, bir test cihazının yeni bir iOS aygıtını her kaydettirişinde gönderilen olayları dinler. Yeni bir iOS cihazı kaydedildiğinde, temel hazırlık profilinizi o cihazın UDID'siyle 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, olay yükünden 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 Uygulama Dağıtımı uyarı etkinlikleri hakkında bilgi edinmek için Uygulama Dağıtımı uyarılarına ilişkin referans belgelere gidin.
App Distribution'dan gelen uygulama içi geri bildirim Firebase uyarısıyla tetiklenen 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.