Как сделать фоновое подключение (Socket.io) в Андроид?
Реализовал сервис типа стики для фонового подключения по сокетам. Всё красиво, не считая того, что многие оптимизаторы режут его, а в оболочках MIUI стики вообще игнорируются, если пользователь не разрешил автозапуск и ещё кучу кнопок не нажал.
Если это хотя бы каким-то образом работает в версиях до орео, то в 26 вообще выбрасывает эксепшен. Как я понял, они их прикрыли для подобных вещей.
Вопрос, что делать? Как реализовать это фоновое подключение, если их лаунчеры хотят прибить, а с восьмого андроида и сама ОС.
Приложение типа мессенджера с ассиметричным шифрованием. Читал, что у гугловых сервисов доставки пуш уведомлений много проблем, да и это всю концепцию портит.
Конкретно интересует примерно такой паттерн: вышел с приложения, живёт ещё несколько минут, потом раз в некоторые промежутки времени (20 — 30 минут) подключается и выгружает новые сообщения. В идеале, конечно, соединение должно жить весь «активный» день пользователя.
Чтобы держать сокет открытым нужно не давать устройству уснуть. Устройство быстро разряжается - пользователь негодует. Поэтому, вам придётся разрывать соединение регулярно. Подход стандартный, устройство будится, wakelock захватывается(обязательно с указанием периода), после чего можно делать свои дела. Надо помнить, что если вы не отпустили wakelock и система уснула по таймауту или таймаут был слишком большой, то дальше его могут и не дать.
Другой вариант, переписать взаимодействие с сервером на C. На исполнение нативного кода таких ограничений нет.