Skip to Content
本页目录

断线与重连

USB 拔出、BLE 信号丢失、系统蓝牙重置和固件重启都可能中断连接。按以下步骤结束被中断的操作、重新连接设备,并安全地复用已选择的钱包。

SDK 已经做的

  • 普通断开 / 重连不会丢掉已确认的 connectProtocol。掉线后不用重新选 V1 / V2。
  • 进行中的调用会失败。SDK 不会重放签名、擦除或固件升级。
  • Protocol V2 按设备串行。第一条调用还在恢复时,不要叠第二条业务调用。

你必须做的

  1. 在应用入口订阅一次 DEVICE.CONNECT / DEVICE.DISCONNECT。
  2. 收到 DISCONNECT 时,把这个 connectId 标成无效,结束当前 UI。不要重试同一个有副作用的方法。
  3. 用户准备好后再 searchDevices。USB 重插和 BLE 重新配对可能得到新的 connectId。USB 和 BLE 的 ID 要分开缓存。见 标识符。
  4. 连上之后用 getDeviceState 刷新设备状态。核对当前身份后复用已保存的 deviceId + passphraseState;身份不匹配时停止并让用户重新选择钱包。不要存固件 session_id。
  5. 下一笔地址 / 签名带上已持久化的 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 可能主动断开。等重连,再读版本。不要把这次断开当成失败升级去重放。见 固件升级。

下一步

最后更新于