توفّر Firebase تنبيهات لمجموعة كبيرة من أحداث إدارة المشروعات والتطبيقات. في ما يلي بعض الأمثلة على الأحداث التي يمكن أن ترسل فيها Firebase إليك هذا النوع من التنبيهات:
- بالنسبة إلى Crashlytics، يمكننا تنبيهك إذا لاحظنا زيادة كبيرة في عدد تعطُّلات تطبيقك.
- بالنسبة إلى Performance Monitoring، يمكننا تنبيهك إذا تجاوز وقت بدء تشغيل تطبيقك الحدّ القصوى الذي تم ضبطه.
- بالنسبة إلى App Distribution، يمكننا تنبيهك إذا سجّل أحد المختبِرين جهاز iOS جديدًا.
استنادًا إلى التنبيه والإعدادات المفضّلة التي ضبطها عضو المشروع، تعرض Firebase هذه الأنواع من التنبيهات في وحدة تحكّم Firebase أو ترسلها عبر البريد الإلكتروني.
توضِّح هذه الصفحة كيفية كتابة دوال في Cloud Functions for Firebase (الجيل الثاني) تعالج أحداث التنبيهات.
كيف تعمل هذه الميزة؟
يمكنك تنشيط الدوالّ استجابةً لأحداث التنبيهات التي تنشئها هذه المصادر:
- معالجة حدث تنبيه App Distribution
- التعامل مع حدث تنبيه Crashlytics
- التعامل مع حدث تنبيه Performance Monitoring
في دورة حياة نموذجية، تُجري الدالة التي يتم تشغيلها من خلال حدث تنبيه ما يلي:
- ينصت إلى نوع تنبيه معيّن أو ينتظره من Firebase.
- يتم تشغيله عند بث التنبيه، ويتلقّى الحمولة المرتبطة بالحدث التي تحتوي على معلومات محدّدة عن الحدث.
- تستدعي رمز الدالة لمعالجة الحمولة البرمجية للحدث.
بدء دالة عند حدوث أحداث تنبيه
استخدِم الحزمة الفرعية firebase-functions/v2/alerts
لكتابة دالة تدخِل في أحداث التنبيهات. توضّح الأمثلة التالية الخاصة بالمنتجات خطوات عمل تستخدم فيه دالة ردّ تلقائي على الويب لنشر رسالة على قناة Discord عند إصدار تنبيه من Firebase.
التعامل مع حدث تنبيه Crashlytics
في مثال Crashlytics التالي، يتم استخدام Cloud Functions for Firebase لمعالجة حدث تنبيه بشأن مشكلة تتعلق بتعطُّل خطير جديد. تنشر هذه الدالة معلومات التنبيه في رسالة إلى قناة Discord.
تستمع الدالة إلى الحدث المقابل لنشر Firebase لمشكلة خطيرة جديدة:
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."""
بعد ذلك، تُحلِّل الدالة عنصر الحدث الذي تم إرجاعه، ويشمل ذلك تحليل المعلومات المفيدة من الحمولة المرتبطة بالحدث وإنشاء رسالة لإرسالها إلى قناة 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()
أخيرًا، تُرسِل الدالة الرسالة التي تم إنشاؤها إلى Discord من خلال طلب 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()
للتعرّف على جميع أحداث تنبيهات Crashlytics التي يمكنك تسجيلها، انتقِل إلى المستندات المرجعية لاطلاع على تنبيهات Crashlytics.
التعامل مع حدث تنبيه Performance Monitoring
يصدِّر هذا المثال دالة تراقب أحداث التنبيهات المتعلّقة بالحد الأدنى للأداء:
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."""
بعد ذلك، تُحلِّل الدالة عنصر الحدث الذي تم إرجاعه، وتُحلِّل معلومات مفيدة من الحمولة المرتبطة بالحدث وتُنشئ رسالة لنشرها على قناة 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()
أخيرًا، تُرسِل الدالة الرسالة التي تم إنشاؤها إلى Discord من خلال طلب 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()
للاطّلاع على جميع أحداث تنبيهات الأداء التي يمكنك تسجيلها، انتقِل إلى المستندات المرجعية التي تخصّ تنبيهات Performance Monitoring.
التعامل مع حدث تنبيه App Distribution
يوضح المثال في هذا القسم كيفية كتابة دالة لتنبيهات أجهزة iOS المختبِرة الجديدة.
في هذا المثال، تستمع الدالة إلى الأحداث التي يتم إرسالها في كل مرة يسجِّل فيها أحد المختبِرين جهاز iOS جديدًا. عند تسجيل جهاز iOS جديد، عليك تعديل ملف التوفير باستخدام رقم تعريف الجهاز (UDID) ثم إعادة توزيع التطبيق.
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."""
بعد ذلك، تُحلِّل الدالة العنصر الذي تم إرجاعه، وتُحلِّل المعلومات المفيدة من حدث ملف ملتحم وتنشئ رسالة لنشرها على قناة 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()
أخيرًا، تُرسِل الدالة الرسالة التي تم إنشاؤها إلى Discord من خلال طلب 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()
للتعرّف على جميع أحداث تنبيهات App Distribution التي يمكنك تسجيلها، انتقِل إلى المستندات المرجعية لاطلاع على تنبيهات App Distribution.
للتعرّف على كيفية استخدام دالة يتم تنشيطها من خلال تنبيه Firebase بشأن الملاحظات والآراء داخل التطبيق من App Distribution، اطّلِع على مقالة إرسال الملاحظات والآراء داخل التطبيق إلى Jira.