Мне очень нравится JS и именно Web-стек. И я таки хочу написать мобильное приложение именно на нем. Кто бы чего ни говорил (а говорят про такой подход очень много, очень давно и в основном нецензурно)
Но ведь такой подход дает очевидное преимущество - одна и та же кодовая база сможет работать реально на всех платформах, включая браузер. А мне без этого никак.
Но в этом приложении нужен BootReceiver. То есть чтобы при запуске ОС запускался какой-то фоновый сервис из этого приложения, и работал с бек-ендом по HTTP.
Ну, BootReceiver я могу и на Kotlin и Swift написать (и оформить это в виде плагина, который потом можно таскать из приложения в приложение), но он должен запускать сервис - а вот сервис-то уж точно надо писать на JS.
Но я так и не смог найти ответ, как же на Cordova сделать фоновый сервис. Там весь код крутится в каком-то WebView, который находится в Activity. Не вижу никакой возможности запустить какой-то JS вне этого WebView.
Открываю исходники cordova-android и смотрю что там за WebView:
https://github.com/apache/cordova-android/blob/mas...
https://github.com/apache/cordova-android/blob/mas...
Увы! Это обычный системный WebView. А это, насколько я понимаю, значит, что:
- данный WebView использует системный браузер, у которого JS-движок не имеет никаких API для использования без WebView
- ну и Cordova очевидно не содержит в себе никакого дополнительного JS интерпретатора, а крутит весь код в этом системном WebView
Если это так, то сделать фоновый сервис на Cordova в общем-то нельзя.
Но так ли это?
И может быть какой-то другой подобный фреймворк дает возможность делать именно фоновые сервисы (service workers?)?
Разумеется я понимаю что в этих сервисах не будет DOM, BOM. Ведь сервисы не будут крутиться в WebView.
Однако теоретически там вполне возможны такие вещи как
fetch, XHR, WebSocket, WebAssembly и даже localStorage.
Чуете, пахнет Node.js?
Ну да, это действительно будет какой-нибудь интерпретатор JS, который вшивается в ваше приложение (ну или устанавливается отдельным приложением на устройство, как .NET Framework на Windows), а также вшиваются "безбраузерные" реализации вышеупомянутых fetch, XHR и прочего, но только те из них, которые реально используются в ваших сервисах.
А если такого нету - то я сам такое создам.