توفّر 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(`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()
للتعرّف على جميع أحداث تنبيهات 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(`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()
للتعرّف على جميع أحداث تنبيهات الأداء التي يمكنك تسجيلها، انتقِل إلى المستندات المرجعية حول تنبيهات 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(`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()
للتعرّف على جميع أحداث تنبيهات App Distribution التي يمكنك تسجيلها، يُرجى الانتقال إلى المستندات المرجعية لتنبيهات App Distribution.
للتعرّف على كيفية استخدام دالة يتم تشغيلها من خلال تنبيه Firebase بشأن الملاحظات داخل التطبيق من App Distribution، يُرجى الاطّلاع على إرسال الملاحظات داخل التطبيق إلى Jira.