Чат для android засыпает и рвет websocket. Как оставить чат в режиме онлайн при засыпании телефона?
Есть web приложение, чат. Прекрасно работает через websocket на ПК(браузер, приложение на nw.js). При попытке перенести его на android, websocket закрывается примерно через 5 минут как гаснет экран. Пробовал PWA и WebView.
Вот и вопрос каким образом реализуются чаты для android? Держат ли они постоянный коннект с сервером обмена сообщений? Или они только подписаны на пуши? А при нажатии на пуш о том что пришло новое сообщение, запускается чат и делается коннект?
Или я уже бред пишу? По факту нужно видеть у других пользователей на web и статус клиента на android (available, away, dnd). А с оборванным websocket статус unavailable. Ну и сообщения не доходят естественно. Придуманы какие то функции экономии батареи, но работает же telegram, whatsapp. Дайте направление, пожалуйста.
Желательно конечно бы оставить при этом весь основной программный функционал на javascript+HTML, чтобы не пришлось писать клиента чата с ноля.
В актуальных версиях андроид сильно урезали приложения в правах работать в фоне. Если приложение долго не запускали, то постепенно ограничивается право сделать запрос к сети до 1 раза в сутки.
Также ограничили возможность из фонового процесса открыть приложение на передний план до 5 секунд после того как из него переключились(вышли)
Как сейчас выкручиваются .
Показать уведомление в шторке (нотифи) с отложенным интентом (пендинг интент)
а)Источник уведомлений - подписка на облачные сообщения (пуши)
б)Использование системного планировщика для запуска коротких запросов к серверу о наличии новых сообщений (аналог крон тасков)
так как а и б происходят в фоне, то можем только нотифи . Активити (окно приложения) использовать нельзя.
При переходе приложения в активное состояние лонг пулл запросы . Вышли из приложения - завершили активное использование сети.
Т.е. идея использовать пуши (firebase), к которой я пришел не бред. Ок!
Может есть ещё идеи как присутсвие/статус (available, away, dnd) организовать? У меня есть идея, но не пишу, чтобы не сбивать с мысли комментаторов.