本页目录
断线与重连
USB 拔出、BLE 信号丢失、系统蓝牙重置和固件重启都可能中断连接。按以下步骤结束被中断的操作、重新连接设备,并安全地复用已选择的钱包。
SDK 已经做的
- 普通断开 / 重连不会丢掉已确认的
connectProtocol。掉线后不用重新选 V1 / V2。 - 进行中的调用会失败。SDK 不会重放签名、擦除或固件升级。
- Protocol V2 按设备串行。第一条调用还在恢复时,不要叠第二条业务调用。
你必须做的
- 在应用入口订阅一次
DEVICE.CONNECT/DEVICE.DISCONNECT。 - 收到
DISCONNECT时,把这个connectId标成无效,结束当前 UI。不要重试同一个有副作用的方法。 - 用户准备好后再
searchDevices。USB 重插和 BLE 重新配对可能得到新的connectId。USB 和 BLE 的 ID 要分开缓存。见 标识符。 - 连上之后用
getDeviceState刷新设备状态。核对当前身份后复用已保存的deviceId + passphraseState;身份不匹配时停止并让用户重新选择钱包。不要存固件session_id。 - 下一笔地址 / 签名带上已持久化的
passphraseState,或useEmptyPassphrase: true。Core 会在那笔方法里恢复固件 session。不要为了重连再开一次钱包 Session。
import { DEVICE } from '@onekeyfe/hd-core';
HardwareSDK.on(DEVICE.DISCONNECT, (payload) => {
markDisconnected(payload);
// Fail the open UI flow; do not replay signing or firmware updates.
});
HardwareSDK.on(DEVICE.CONNECT, () => {
refreshDeviceList();
});BLE
- 进程重启后仍需检查权限(
BLUETOOTH_SCAN/BLUETOOTH_CONNECT、iOS 蓝牙用途声明;Android 位置权限取决于系统版本和用途)。见 React Native BLE。 retryCount/timeout控制设备调用前的连接阶段,不会重试签名,也不能替代应用恢复流程。- OS 绑定过期时,不要死循环 connect。让用户在系统蓝牙设置里忽略设备再配对。
- Mini 没有 BLE。Neo 有 BLE 但没有摄像头。见 设备。
USB
- WebUSB 再次弹出选择器需要用户手势,除非设备仍在授权期内并传了
skipWebDevicePrompt。见 通用参数。 - 其他标签页或 Bridge 占用设备可能导致 acquire/open 失败。先关掉占用方,不要把
dispose()当第一反应。
dispose()
await HardwareSDK.dispose();只在拆除 SDK,或切换 env / 传输栈(例如 WebUSB → low-level)时调用 dispose()。它会丢掉所有链路和 Protocol V2 传输游标。
普通 BLE 掉线或 USB 拔出不要 dispose()。在同一个 HardwareSDK 实例上重新 search 再连。
dispose() 之后必须重新 init() 才能 searchDevices。
固件重启
firmwareUpdateV2 / V3 / V4 可能主动断开。等重连,再读版本。不要把这次断开当成失败升级去重放。见 固件升级。
下一步
最后更新于