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) => {
پایتون
@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}\`
`;
پایتون
# 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()
درنهایت، تابع پیام ساختهشده را ازطریق درخواست HTTP به Discord ارسال میکند:
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}`);
}
پایتون
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) => {
پایتون
@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}
`;
پایتون
# 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()
درنهایت، تابع پیام ساختهشده را ازطریق درخواست HTTP به Discord ارسال میکند:
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}`);
}
پایتون
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) => {
پایتون
@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}
`;
پایتون
# 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()
درنهایت، تابع پیام ساختهشده را ازطریق درخواست HTTP به Discord ارسال میکند:
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}`);
}
پایتون
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 مراجعه کنید.