包
@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 回答。使用其中一个。
自动翻译。英语是真实来源。 阅读英文