Шлюз работает круглосуточно без участия человека: держит связь с сервером, переживает перезагрузку телефона и повторяет неудачные операции. Главная угроза: экономия батареи в Android, которая усыпляет фоновые приложения. Ниже описано, как приложение с ней справляется и что настроить на телефоне.
#Фоновая работа
#Sticky-уведомление
Постоянное уведомление в шторке Android. Оно:
- не даёт системе выгрузить приложение;
- показывает, что шлюз работает;
- включается и выключается в настройках приложения.
#Настройки батареи на телефоне
| Действие | Где |
|---|---|
| Отключить оптимизацию батареи | Настройки → Приложения → tuk-tuk → Батарея → «Не ограничивать» |
| Включить автозапуск | Настройки → Приложения → tuk-tuk → Автозапуск |
| Закрепить приложение | В списке последних приложений нажать значок замка на tuk-tuk |
#Heartbeat
Heartbeat: регулярный сигнал от телефона серверу «я работаю, вот моё состояние». Если сигналы перестали приходить, устройство считается офлайн.
#Как работает
- Каждые 30 минут (настраивается, минимум 15) приложение просыпается.
- Собирает данные о состоянии телефона.
- Отправляет их на сервер.
- Сервер обновляет карточку устройства в кабинете.
#Что передаётся
| Данные | Пример |
|---|---|
| Уровень батареи | 78% |
| Тип сети | Wi-Fi, LTE, 3G |
| Свободная память | 2.1 ГБ из 6 ГБ |
| Свободное хранилище | 15 ГБ из 64 ГБ |
| Часовой пояс | UTC+3 |
| SIM-карты | Оператор, страна, слот |
| Push-токен | Актуальный токен для FCM |
#Интервал
| Интервал | Когда выбирать |
|---|---|
| 15 минут | Максимальный контроль, чуть выше расход батареи |
| 30 минут | По умолчанию |
| 60 минут | Экономия батареи, статус обновляется реже |
Сервер может запросить heartbeat вне расписания через push, когда нужно актуальное состояние устройства прямо сейчас.
#Push-уведомления (FCM)
Команды приходят на телефон через Firebase Cloud Messaging.
| Тип | Что делает |
|---|---|
| SMS | Отправить SMS: получатели, текст, SIM-слот |
| Heartbeat | Отправить состояние устройства сейчас |
Push доставляется сразу, даже когда приложение спит: Android будит его для обработки. Если push не дошёл, сервер повторяет отправку до 3 раз.
#Автозапуск после перезагрузки
После перезагрузки (обновление, разряд, сбой) приложение восстанавливает работу само, открывать его не нужно.
| Действие при загрузке | Описание |
|---|---|
| Heartbeat | Перезапускает расписание |
| Обновление данных | Отправляет актуальное состояние телефона |
| Уведомление | Восстанавливает sticky-уведомление, если оно было включено |
Технически: приложение регистрирует BootCompletedReceiver, Android вызывает его при загрузке, и фоновые задачи запускаются заново.
#Повторы при ошибках
| Операция | Правило |
|---|---|
| Push с командой на SMS | Сервер повторяет до 3 раз |
| Загрузка входящего SMS на сервер | До 5 попыток с паузами 10, 20, 40, 80 и 160 секунд, только при наличии интернета |
| Heartbeat | Следующая попытка по расписанию, минимальный интервал 15 минут |
Если устройство всё же ушло в офлайн, см. Мониторинг: частые проблемы.
