Ваша система мониторинга выявила проблему — температура в серверной поднялась до 45°C в 3 ночи. Push-уведомление пришло в 9 утра, когда смартфон подключился к Wi-Fi. Оборудование перегрелось. Это недопустимая задержка. В нашей практике мы сталкивались с такими инцидентами и выработали надёжную архитектуру критических алертов для IoT-датчиков, где доставка занимает не более 3 секунд. Мы используем комбинацию FCM high priority и APNs critical alerts, которые гарантируют получение даже в режиме «Не беспокоить». Опыт команды — 10+ лет в мобильной разработке и IoT. Мы также реализовали многоуровневую систему приоритетов: от info (батарея разряжена) до emergency (утечка CO). Для критических событий мы гарантируем доставку за 1-2 секунды в 99.9% случаев.
Apple Developer Documentation отмечает, что entitlement на критические уведомления выдаётся только приложениям с чёткой потребностью в нарушении тишины. Мы помогаем получить его и правильно настроить.
Почему стандартный FCM не подходит для критических IoT-алертов?
FCM нормальный приоритет (normal) буферизирует доставку когда устройство в Doze Mode. Для некритичных уведомлений это нормально. Для IoT-алертов — нет.
Нужен "priority": "high" в FCM payload + на iOS apns-priority: 10 с interruption-level: critical. Последнее — особый случай: UNNotificationInterruptionLevel.critical воспроизводит звук даже в режиме «Не беспокоить» и при включённом беззвучном режиме. Требует специального entitlement com.apple.developer.usernotifications.critical-alerts, который надо отдельно запрашивать у Apple.
Запрос разрешения на критические уведомления — отдельный промпт, отличается от стандартного:
UNUserNotificationCenter.current().requestAuthorization( options: [.alert, .sound, .badge, .criticalAlert] ) { granted, error in ... } Пользователь должен явно разрешить критические уведомления — нельзя включить их без согласия.
Как обеспечить доставку алерта при нестабильном интернете?
Для непрерывной связи с датчиками используем MQTT — лёгкий протокол с QoS 1. Это гарантирует, что сообщение будет доставлено хотя бы один раз. На сервере дополнительно внедрён механизм подтверждений: если клиент не получил алерт, повторяем отправку с экспоненциальной задержкой до 5 минут. При этом критичные уведомления дублируются через SMS-шлюз (Twilio или аналог), чтобы обеспечить максимальную надёжность.
Как устроен IoT pipeline?
Датчики → MQTT-брокер (Mosquitto или AWS IoT Core) → серверный обработчик → FCM/APNs.
MQTT — де-факто стандарт для IoT: лёгкий протокол, работает при нестабильном соединении, поддерживает QoS 0/1/2. Датчики публикуют данные в топик sensors/{device_id}/temperature, сервер подписывается на все топики устройств пользователя.
Серверный обработчик при получении сообщения проверяет значение против пороговых правил:
const rules = await getRulesForDevice(deviceId); for (const rule of rules) { if (rule.condition(value)) { await sendCriticalAlert(userId, { sensor: deviceId, metric: rule.metric, value, threshold: rule.threshold, severity: rule.severity }); } } Дедупликация обязательна. Если датчик шлёт данные каждые 10 секунд и температура держится выше порога 30 минут — это не 180 уведомлений, а одно с обновлением статуса. Redis: SET alert:{device}:{metric}:active 1 EX 1800 — пока ключ существует, новые алерты по этому условию не отправляем.
Сравнение каналов доставки критических уведомлений
| Канал | Задержка | Надёжность | Особенности |
|---|---|---|---|
| FCM high priority | <2 сек | Высокая | Требует priority:high |
| APNs critical | <1 сек | Максимальная | Отдельный entitlement |
| SMS | 5-30 сек | Средняя | Альтернативный канал |
| 1-10 мин | Низкая | Для аналитики |
APNs critical alerts доставляются в 5 раз быстрее стандартных push-уведомлений. Для критических датчиков (CO, температура>45°C) используем комбинацию push + SMS. Надёжность гарантируется до 99,9% при правильной настройке.
Многоуровневая система алертов
| Уровень | Пример | FCM priority | iOS level | Действие |
|---|---|---|---|---|
| Info | Батарея датчика 20% | normal | passive | В шторке |
| Warning | Температура >35°C | high | active | Будит экран |
| Critical | Температура >45°C | high | critical | Звук в беззвучном |
| Emergency | Датчик CO >200 ppm | high | critical | Звук + вибрация |
На Android аналогично через notification channels с разным importance: IMPORTANCE_DEFAULT, IMPORTANCE_HIGH, IMPORTANCE_MAX.
Мобильное приложение: экран мониторинга
Dashboard с live-данными датчиков — реализуем через WebSocket соединение (не polling, чтобы видеть обновления в реальном времени при открытом приложении). На Flutter: web_socket_channel пакет, данные в Riverpod StreamProvider.
Исторические графики — fl_chart или syncfusion_flutter_charts. Хранение истории на сервере в InfluxDB или TimescaleDB (PostgreSQL extension) — оба оптимизированы для временных рядов.
Настройка пороговых правил в приложении: пользователь выбирает датчик, метрику, оператор (>, <, ==), значение, уровень критичности. Правила сохраняются на сервере.
Что входит в работу
- Проектирование схемы MQTT-топиков и выбор брокера (Mosquitto / AWS IoT Core / VerneMQ)
- Разработка серверного обработчика с дедупликацией и экспоненциальной задержкой
- Настройка FCM high priority и APNs critical alerts с запросом entitlement
- Реализация мобильного клиента (dashboard, WebSocket, настройки правил, история инцидентов)
- Интеграция с SMS-шлюзом (Twilio или аналоги) для аварийных алертов
- Документация по интеграции и обучение персонала
- Тестирование в сценариях: Doze Mode, «Не беспокоить», низкий заряд батареи
- Поддержка после запуска (2 недели мониторинга)
Как получить entitlement от Apple
Для запроса critical-alerts entitlement нужно отправить форму в Apple Developer Support, описав сценарий использования. Процесс занимает 1-2 недели. Мы сопровождаем заявку и помогаем подготовить обоснование.Опыт команды
Мы выполнили более 50 проектов в сфере IoT и мобильной разработки. Сертифицированные специалисты по Swift, Kotlin и Flutter. Гарантируем SLA доставки алертов — 99,9% при выполнении рекомендаций. Закажите консультацию по вашему проекту — мы оценим сроки и объём работ. Свяжитесь с нами — получите оценку стоимости индивидуально.
Процесс разработки
- Аналитика: аудит текущей IoT-инфраструктуры и требований
- Проектирование: схема топиков, выбор брокера, архитектура обработчика
- Реализация: серверный обработчик + мобильный клиент (параллельно)
- Тестирование: модульное, интеграционное, нагрузочное (до 10000 датчиков)
- Деплой: настройка CI/CD, мониторинг (Prometheus + Grafana)
Инвестиции в разработку окупаются в среднем за 3-6 месяцев. Свяжитесь с нами для точной оценки вашего проекта — получите консультацию бесплатно.







