Как вывести уведомления в фоновом "WebView"-приложении?
Написала WebView-приложение простого мессенджера-чата (то есть сайт в обертке Android-приложения). Уведомления для пользователя вывожу через Javascript-Java-адаптер: то есть вывожу их в JS, который обращается к Java, который и выводит уведомление. Это удовлетворительно работает. Но столкнулась с проблемой неприходящих уведомлений о новых сообщениях для пользователя спустя некоторое время работы приложения в фоновом режиме.
Предположила, что дело в засыпании приложения или JS в webview-компоненте через неопределенное время его сворачивания (нажатия на устройстве кнопки "Home", например).
Нагуглила, что проверку новых сообщений пользователя нужно реализовывать через "ForegroundService": то есть в MainActivity (в котором есть компонент WebView) при запуске приложения необходимо запускать сервис (класс ForegroundService), который в фоновом режиме выполнял бы запросы на сервер каждую минуту и полученную информацию выводил в виде уведомления. Корректна ли такая практика?
Если рассуждения верные, то возникает вопрос: какой запрос мне необходимо передавать на сервер, чтобы он мог идентифицировать пользователя? Достаточно ли каждую минуту выполнять POST-запрос с "sessionid", формируемый Django, чтобы идентифицировать пользователя? Значение "sessionid" планирую получать из куки компонента webView. Безопасно ли это?
Выглядит очень костыльно и велосипедно, оттого и сомнения в правильности моих действий.
Задача, которую Вы хотите решить (периодический опрос сервера из фона) не совпадает с тем, как гугл видит
свою операционную систему. Во первых, противоречит их установке "Батарея должна жить долго". Во вторых, не раздражайте пользователей лишними напоминаниями. А главное они считают, что для этой задачи нужно использовать GCM(FCM) - Google/Firebase Cloud Messages (платный при превышении лимитов).
Подобные политики конечно "радуют", но возникает 2 вопроса:
какие предлагаются альтернативы опросу сервера о непрочитанных пользователем сообщений
каким образом я идентифицирую пользователя моего приложения через FCM (особенно если он не имеет учетной записи Google)? Всегда думала что FCM для массовых пушей.
Вернемся к проблемам web-view приложений. Главное тут WebKit фризится при потере фокуса. Любой js код будет остановлен. Значит придется работать с нативной частью андроида.
Есть мостик для взаимодействия js кода в вебью и приложением. (webView.addJavascriptInterface())
Но дальше выше указанные проблемы.
Технически любой сайт может слать пуши. Там ничего сложного. Получить токен согласия от пользователя (приложения броузера). https://firebase.google.com/pricing
Казалось бы бесплатно, но если ничего не изменилось, то требует привязки карты для оплаты, а с этим засада.