Firebase предоставляет оповещения для широкого спектра событий управления проектами и приложениями. Вот несколько примеров событий, когда Firebase может отправлять вам оповещения такого типа:
- Что касается Crashlytics, мы можем предупредить вас, если у вашего приложения резко увеличилось количество сбоев.
- Для мониторинга производительности мы можем предупредить вас, если время запуска вашего приложения превысит настроенный вами порог.
- Для распространения приложений мы можем предупредить вас, если один из ваших тестировщиков зарегистрирует новое устройство iOS.
В зависимости от оповещения и настроек, установленных участником проекта , Firebase отображает эти типы оповещений в консоли Firebase или отправляет их по электронной почте.
На этой странице описывается, как писать функции в Cloud Functions для Firebase (2-го поколения), которые обрабатывают события предупреждений.
Как это работает?
Вы можете запускать функции в ответ на события предупреждений, создаваемые этими источниками:
- Обработка события оповещения о распространении приложений
- Обработка события оповещения Crashlytics
- Обработка события оповещения мониторинга производительности
В типичном жизненном цикле функция, запускаемая событием оповещения, делает следующее:
- Прослушивает/ждет отправки оповещений определенного типа из Firebase.
- Запускается при отправке предупреждения и получает полезные данные события, которые содержат конкретную информацию о событии.
- Вызывает код вашей функции для обработки полезной нагрузки события.
Активировать функцию при возникновении предупреждений
Используйте подпакет firebase-functions/v2/alerts
чтобы написать функцию, которая обрабатывает события предупреждений. В следующих примерах для конкретных продуктов демонстрируется рабочий процесс, в котором функция использует веб-перехватчик для отправки сообщения в канал Discord, когда из Firebase отправляется предупреждение для этого продукта.
Обработка события оповещения Crashlytics
В следующем примере Crashlytics вы используете облачные функции для 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()
Наконец, функция отправляет сконструированное сообщение в 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);
}
Питон (предварительная версия)
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 .
Обработка события оповещения мониторинга производительности
В этом примере экспортируется функция, которая отслеживает события предупреждения о пороге производительности:
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()
Наконец, функция отправляет сконструированное сообщение в 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);
}
Питон (предварительная версия)
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()
Чтобы узнать обо всех событиях предупреждений о производительности, которые вы можете зафиксировать, перейдите к справочной документации по предупреждениям мониторинга производительности .
Обработка события оповещения о распространении приложений
В примере в этом разделе показано, как написать функцию для оповещений о новых тестировщиках устройств 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()
Наконец, функция отправляет сконструированное сообщение в 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);
}
Питон (предварительная версия)
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()
Чтобы узнать обо всех событиях оповещений о распространении приложений, которые вы можете зафиксировать, перейдите к справочной документации по оповещениям о распространении приложений .
Чтобы узнать, как использовать функцию, активируемую оповещением Firebase об отзыве в приложении от App Distribution , см . раздел Отправка отзыва о приложении в Jira .