Пакеты
@lia-labs/bridge
Копировать страницу
Низкий уровень. Типизированные вызовы и события через Lia-мост, таймауты и ограничения, и mockLia() для построения вне Lia.
Большинство приложений хотят @lia-labs/sdk, который построен на этом и повторно экспортирует все это. Используйте мост отдельно, чтобы создать собственный слой, или чтобы вызвать что-то, что SDK'не завершён.
npm install @lia-labs/bridge#Протокол
Внутри Lia ваша страница работает в приложении Lia'веб-просмотр. Вызов - это JSON сообщение, которое страница постит с window.ReactNativeWebView.postMessage:
{ "lia": 1, "id": 7, "method": "haptic", "params": { "kind": "success" } }Lia отвечает на каждый звонок один раз, через window.__lia.receive(...), с { id, ok: true, result } или { id, ok: false, error: { code, message? } }, и отправляет события тем же способом, что и { event, data }. Мост определяет window.__lia (заморожен, один раз на страницу) и соответствует ответам на вызовы по id.
#Вызов
import { isLia, request, send } from '@lia-labs/bridge';
isLia(); // true inside the Lia app (or with mockLia)
const me = await request('init');
const { best } = await request('submitScore', { score: 1280 });
send('ready'); // without waiting for the answer; failures are droppedrequest(method, params?, options?) типизируется по методу: параметры, которые он принимает, и ответ, с которым он разрешается, берутся из Methods типа. Он отклоняется с LiaError:
| Код | Когда |
|---|---|
not_in_lia | Там'нет моста (не внутри Lia, нет макета). |
timeout | Lia не может't ответить в течение 20 секунд (или ваш timeout. Вызовы, которые ждут человека (pay, объявления, диалоги, сканер, Face ID) не имеют ограничений, если вы не установите их. |
aborted | Ваш signal был прерван. Lia все еще может действовать на вызов. |
too_large | Сообщение содержит более 16,000 символов, что Lia проигнорирует. |
| Lia'свои коды | Какой бы Lia ни ответил: см. Коды ошибок. |
const controller = new AbortController();
const code = request('scanQr', { text: 'Scan a table' }, { signal: controller.signal, timeout: 60_000 });#Слушание
import { on, once, onAny, off } from '@lia-labs/bridge';
const stop = on('theme', ({ colorScheme, theme }) => repaint(colorScheme, theme));
once('resume', () => refresh());
onAny((event, data) => console.log(event, data));
stop();События имеют тип (Events): pause, resume, theme, viewport, fullscreenChanged, languageChanged, startParam, notificationsChanged, soundChanged, charge, ad, четыре *ButtonClicked события, и sensor ({ name, values }; SDK превращает его в каждый датчик's reading. Слушатель, который вызывает ошибку, записывается и не'не останавливать других.
#Все, что он экспортирует
| Экспорт | |
|---|---|
isLia() | Есть ли мост. |
request(method, params?, options?) | Типизированный вызов. |
send(method, params?) | Вызов без ожидания. |
on, off, once, onAny | События. |
mockLia(options?), MOCK_INIT | Представьте Lia: см. Локальная разработка. |
emit(message) | Передает сообщение странице, как будто Lia отправил его (для моков и тестов). |
setDebug(on, logger?) | Ведет журнал каждого вызова, ответа и события. |
install() | Начинает слушать сейчас; говорит, является ли window.__lia является этим пакетом's. |
LiaError, isLiaError(error, code?) | Ошибки. |
PROTOCOL, DEFAULT_TIMEOUT, MAX_MESSAGE, PATIENT | Протокол'версия и лимиты. |
resetForTests() | Забывает каждый вызов и слушатель. |
| Типы | Methods, MethodName, ParamsOf, ResultOf, Events, EventName, InitResult, ThemeParams и каждую форму Lia отправляет. |
#Один на страницу
Две копии моста в одном пакете делят один набор вызовов и слушателей (хранятся в глобальном символе), поэтому ничего не сломается. Тег скрипта SDK может'не делиться: если это's уже на странице, мост предупреждает и может'не слышать Lia's ответы. Используйте один или другой.
Автоматически переведено. Английский — источник истины. Читать на английском