Service
Прямой доступ к зарегистрированному хостом headless-сервису — собрату NativeView без UI.
Сервис — это нативный код, который хост зарегистрировал под именем
(engine.registerService("app.battery") { params, channel in … } на iOS); приложение общается с
ним через JSON-сессию вызовов/событий. Первопартийные сервисы поставляются с типизированными
обёртками (Geolocation, Push) — Service для всего остального:
нативного кода, который ты написал в собственной оболочке приложения, и сторонних плагинов
без библиотеки-обёртки.
Опционален по хосту, как и любой плагин: веб-редактор не регистрирует ни одного сервиса,
поэтому всегда проверяй Service.isSupported(name).
if (Service.isSupported("app.battery")) {
const battery = Service("app.battery")
battery.on("change", data => { levelText.text = data.level + "%" })
const { level, charging } = await battery.call("level")
}API
Service(name, params?)— клиент именованного сервиса. Сессия хоста открывается лениво при первомcall(); в этот моментparamsпередаются фабрике хоста.Service.isSupported(name)— зарегистрировал ли этот хост фабрику под именемname..call(method, ...args)— вызвать метод; аргументы и результат сериализуются в JSON. Отклоняется, если у хоста нет такого сервиса или нативная сторона сообщила об ошибке..on(event, cb)/.off(event, cb)— подписка на события, которые сервис шлёт, пока открыта сессия. Полезные нагрузки приходят уже декодированными из JSON..close()— закрыть сессию хоста (нативная сторона останавливает свою работу). Слушатели остаются зарегистрированными; последующийcall()открывает свежую сессию, которая снова доставляет им события.
Именование
Первопартийные сервисы владеют голыми именами (geolocation, push). Локальные сервисы
приложения называй app.* (app.battery), сервисы сторонних плагинов — с вендорным префиксом
(acme.bluetooth) — голые имена зарезервированы за SDK.
Для разового синхронного значения (без событий, без async) хостовый
engine.registerCallback("native.thing") { … }, внедряющий обычный глобал, может быть проще
сервиса — см. документацию оболочки приложения. Берись за Service, как только нужны события,
асинхронная работа или состояние сессии.