跳到主要内容

Flutter原生蓝牙

本页基于《传输插件(Low-level)》与消息协议,建议先阅读接口与 64 字节帧格式。

如果 Flutter 应用希望通过手机蓝牙直接连接 UKey Wallet,可以把 JS SDK 打包后放入 WebView 或 JS 引擎运行,再用 Dart/原生插件把 BLE 数据转发给 SDK 的底层适配器。

第1步:选运行时

  • WebView:兼容性最好,桥接接口也更接近 Android/iOS 原生外壳。
  • JS 引擎:例如 flutter_js,适合不想引入完整 WebView 的场景,但需要自行验证运行时兼容性。

第2步:构建JS

在 hardware-js-sdk 的原生参考中构建 Web 资源,通常会从 web/ 目录生成 web_dist/。该产物包含 SDK 调用逻辑和与原生桥通信的代码。

第3步:加载JS

web_dist/ 作为 Flutter 资源打入应用,并在 WebView 或 JS 引擎中加载。初始化完成后,Flutter 层再把设备列表、连接状态和 BLE 通知传给 JS。

第4步:消息桥接

向 JS 暴露 enumerateconnectdisconnectsendreceive 等底层方法,并保持方法签名一致。BLE 通知通常按 64 字节分片返回,Flutter/原生层负责转发,JS 侧再按协议重组十六进制负载。

第5步:处理UI

PIN、Passphrase 和设备确认都应由 Flutter 页面展示清晰的原生弹窗。用户输入或确认后,再用 ukeySdk.uiResponse 把结果回传给 SDK 实例。

BLE标识

  • primaryServiceUUIDString = ["00000001", "0000", "1000", "8000", "00805f9b34fb"].join("-")
  • txCharacteristicUUIDString = ["00000002", "0000", "1000", "8000", "00805f9b34fb"].join("-")
  • rxCharacteristicUUIDString = ["00000003", "0000", "1000", "8000", "00805f9b34fb"].join("-")

相关项

连接建立后,链相关 API 的调用方式与 WebUSB 保持一致:传入 connectId,必要时再传入 deviceId