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 olay şunlardır:
- Crashlytics için, uygulamanızda çökmelerde önemli bir artış olması durumunda 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 kaydettiğinde 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-posta yoluyla gönderir.
Bu sayfa, uyarı olaylarını işleyen Cloud Functions for Firebase (2. nesil) işlevlerinin nasıl yazılacağını açıklar.
Nasıl çalışır?
Bu kaynaklar tarafından yayılan uyarı olaylarına yanıt olarak işlevleri tetikleyebilirsiniz:
- App Distribution uyarı etkinliğini ele alma
- Crashlytics uyarı etkinliğini yönetme
- Performance Monitoring uyarı etkinliğini yönetme
Normal bir yaşam döngüsünde, 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 olay hakkında özel bilgi içeren olay yükünü alır.
- Olay yükünü işlemek için fonksiyonunuzun kodunu çağırır.
Uyarı olaylarında bir işlevi tetikleyin
Uyarı etkinliklerini işleyen bir işlev yazmak için firebase-functions/v2/alerts alt paketini kullanın. Aşağıdaki ürüne özgü örnekler, bir fonksiyonun, Firebase'den söz konusu ürüne ilişkin bir uyarı yayınlandığında bir Discord kanalına bir mesaj göndermek için bir web kancası kullandığı bir iş akışını göstermektedir.
Crashlytics uyarı olayını yönetin
Aşağıdaki Crashlytics örneğinde, yeni bir önemli kilitlenme sorununun uyarı etkinliğini işlemek için Cloud Functions for Firebase kullanıyorsunuz. Bu fonksiyon uyarı bilgisini bir mesajda bir Discord kanalına gönderir.
Bu işlev, Firebase'in yeni bir önemli sorun yayınlamasına 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."""
Ardından işlev, döndürülen etkinlik nesnesini ayrıştırır, etkinlik yükünden yararlı bilgileri ayrıştırır ve Discord kanalında yayınlanacak 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(`Discord returned status code ${response.status}`);
}
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 belgelerine gidin.
Performance Monitoring uyarı etkinliğini yönetme
Bu örnekte, performans eşiği uyarı etkinliklerini dinleyen bir işlev dışa aktarılıyor:
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."""
Ardından işlev, döndürülen etkinlik nesnesini ayrıştırır, etkinlik yükünden yararlı bilgileri ayrıştırır ve Discord kanalında yayınlanacak bir ileti 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(`Discord returned status code ${response.status}`);
}
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ı ile ilgili referans belgelerine gidin.
App Distribution uyarı etkinliğini yönetme
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, her test kullanıcısı yeni bir iOS cihaz kaydettiğinde gönderilen etkinlikleri dinler. Yeni bir iOS cihaz kaydedildiğinde temel hazırlık profilinizi bu 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."""
Ardından işlev, döndürülen nesneyi ayrıştırır, etkinlik 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(`Discord returned status code ${response.status}`);
}
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ı ile ilgili referans belgelerine gidin.
App Distribution'dan gelen bir 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 başlıklı makaleyi inceleyin.