Skip to Content
硬件接入概览

简介

面向开发者的 OneKey 硬件钱包集成文档,适用于 Web 和原生应用。本指南涵盖 SDK 安装、初始化、设备发现、UI 提示处理,以及首次签名调用。

选择传输协议

USB 场景一律推荐 @onekeyfe/hd-common-connect-sdk@onekeyfe/hd-web-sdk 仅用于插件端(iframe 嵌入形式)。

连接方式

方式描述支持机型
USB / WebUSB有线 USB;Web 使用 WebUSB,原生使用底层插件所有 OneKey 设备
Bluetooth BLE(原生)原生 App 的 BLE;不支持 Web BluetoothPro、Touch、Classic 1s / Classic 1s Pure;Mini 不支持 BLE
Air-Gap(二维码)离线扫码签名仅 OneKey Pro

平台指南

平台(技术栈)传输协议SDK 包指南
Web(浏览器)WebUSB@onekeyfe/hd-common-connect-sdk WebUSB 连接指南
React Native蓝牙@onekeyfe/hd-ble-sdk React Native 蓝牙
Android(原生)蓝牙@onekeyfe/hd-common-connect-sdk Android 蓝牙
iOS(原生)蓝牙@onekeyfe/hd-common-connect-sdk iOS 蓝牙
Flutter蓝牙@onekeyfe/hd-common-connect-sdk Flutter 蓝牙

低层协议与自定义通道参考:底层传输插件与协议

安装 SDK

按运行时选择一个入口安装:

# Web / 桌面 WebUSB(推荐) npm i @onekeyfe/hd-common-connect-sdk # React Native BLE npm i @onekeyfe/hd-ble-sdk # 原生宿主 + 底层插件(Android/iOS/Flutter 桥接) npm i @onekeyfe/hd-common-connect-sdk # 插件端 iframe(仅插件端) npm i @onekeyfe/hd-web-sdk

传输细节:

初始化 SDK

按照运行时选择对应的初始化方式,避免混用。

Web / 桌面 WebUSB

使用 @onekeyfe/hd-common-connect-sdk

import HardwareSDK from '@onekeyfe/hd-common-connect-sdk'; await HardwareSDK.init({ env: 'webusb', debug: process.env.NODE_ENV !== 'production', fetchConfig: true, });

React Native BLE

使用 @onekeyfe/hd-ble-sdk

import HardwareSDK from '@onekeyfe/hd-ble-sdk'; await HardwareSDK.init({ debug: __DEV__, });

原生桥接 / 低层协议

使用 @onekeyfe/hd-common-connect-sdk

import HardwareSDK from '@onekeyfe/hd-common-connect-sdk'; await HardwareSDK.init({ env: 'lowlevel', debug: process.env.NODE_ENV !== 'production', fetchConfig: true, });
环境使用场景
webusb浏览器 WebUSB(无 iframe)
lowlevel原生应用通过底层适配器桥接 JS
react-native基于自定义 RN 桥或 Electron BLE
emulator使用内置模拟器

插件端 Iframe

使用 @onekeyfe/hd-web-sdk(仅插件端):

import { HardwareSDK } from '@onekeyfe/hd-web-sdk'; await HardwareSDK.init({ debug: process.env.NODE_ENV !== 'production', connectSrc: 'https://jssdk.onekey.so/1.1.19/', // iframe host });

绑定事件

设置设备连接和 UI 提示的事件监听器:

import { UI_EVENT, UI_REQUEST, DEVICE } from '@onekeyfe/hd-core'; HardwareSDK.on(UI_EVENT, async (message) => { switch (message.type) { case UI_REQUEST.REQUEST_PIN: // 处理 PIN 输入(见下文) break; case UI_REQUEST.REQUEST_PASSPHRASE: // 处理密码短语输入(见下文) break; } }); HardwareSDK.on(DEVICE.CONNECT, (payload) => console.log('已连接:', payload)); HardwareSDK.on(DEVICE.DISCONNECT, (payload) => console.log('已断开:', payload));

发现设备

WebUSB 授权(浏览器)

import { ONEKEY_WEBUSB_FILTER } from '@onekeyfe/hd-shared'; // 触发浏览器设备选择器 await navigator.usb.requestDevice({ filters: ONEKEY_WEBUSB_FILTER });

搜索设备

const result = await HardwareSDK.searchDevices(); if (!result.success) throw new Error(result.payload.error); const devices = result.payload; // [{ connectId, deviceId?, name, deviceType, ... }]

获取设备特征

connectId 解析 device_id(BLE 连接必需):

const features = await HardwareSDK.getFeatures(connectId); if (!features.success) throw new Error(features.payload.error); const deviceId = features.payload.device_id;

重要: connectId 可长期缓存(设备重置不影响);device_id 在设备重置/恢复后会变化,需要重新 getFeatures 刷新。

处理 PIN 输入

当执行受保护的调用且设备已锁定时,处理 REQUEST_PIN

import { UI_RESPONSE } from '@onekeyfe/hd-core'; // 方式 1:在设备上输入(推荐) await HardwareSDK.uiResponse({ type: UI_RESPONSE.RECEIVE_PIN, payload: '@@ONEKEY_INPUT_PIN_IN_DEVICE' }); // 方式 2:软件盲输 PIN(Pro/Touch 不支持) await HardwareSDK.uiResponse({ type: UI_RESPONSE.RECEIVE_PIN, payload: userInputPin // 例如 '1234' });

注意: OneKey Pro 和 Touch 设备仅支持设备端 PIN 输入。

处理密码短语

访问隐藏钱包时,处理 REQUEST_PASSPHRASE

// 方式 1:在设备上输入(最安全) await HardwareSDK.uiResponse({ type: UI_RESPONSE.RECEIVE_PASSPHRASE, payload: { passphraseOnDevice: true, value: '' } }); // 方式 2:软件输入,可选会话缓存 await HardwareSDK.uiResponse({ type: UI_RESPONSE.RECEIVE_PASSPHRASE, payload: { value: userPassphrase, passphraseOnDevice: false, save: true } });

强制使用标准钱包(跳过密码短语),在任意方法调用中添加 useEmptyPassphrase: true

首次签名调用

示例:签名 EVM 消息(EIP-191 personal_sign):

const message = 'Hello OneKey'; const messageHex = Buffer.from(message).toString('hex'); const res = await HardwareSDK.evmSignMessage(connectId, deviceId, { path: "m/44'/60'/0'", messageHex, chainId: 1, }); if (!res.success) throw new Error(res.payload.error); console.log('地址:', res.payload.address); console.log('签名:', res.payload.signature);

设备与传输兼容性

蓝牙、USB 和 Air-Gap 连接的支持状态

设备蓝牙USBAir-Gap
OneKey Classic 1s
OneKey Classic 1s
经典款 Classic 1s
SupportedSupportedN/A
OneKey Classic 1s Pure
OneKey Classic 1s Pure
Classic 1s Pure 无电池版本
SupportedSupportedN/A
OneKey Mini
OneKey Mini
紧凑型 USB 钱包
N/ASupportedN/A
OneKey Touch
OneKey Touch
全触屏体验
SupportedSupportedN/A
OneKey Pro
OneKey Pro
旗舰版,支持指纹识别
SupportedSupportedSupported

Air-Gap 模式: OneKey Pro 支持通过二维码进行离线签名(Air-Gap)— 无需 USB 或蓝牙连接,提供最高级别的安全性。详见 Air-Gap 集成

核心包

包名用途NPM版本
@onekeyfe/hd-common-connect-sdk统一的 Web/原生 SDK 接口;推荐作为传输层入口npm npm
@onekeyfe/hd-ble-sdk纯 React Native 蓝牙协议栈(推荐用于 RN 项目)npm npm
@onekeyfe/hd-transport-react-nativeReact Native 传输层副作用/桥接npm npm
@onekeyfe/hd-transport-web-deviceWeb 环境设备访问传输层npm npm
@onekeyfe/hd-transport-emulator模拟器传输层(无需物理设备即可开发和测试)npm npm
@onekeyfe/hd-transport-httpHTTP 桥接传输层npm npm
@onekeyfe/hd-transport-lowlevel底层主机适配器协议(用于原生集成)npm npm
@onekeyfe/hd-core核心事件、常量、消息处理npm npm
@onekeyfe/hd-shared共享工具和类型npm npm
@onekeyfe/hd-web-sdkWeb SDK 封装(不推荐;建议使用 hd-common-connect-sdk)npm npm

API 参考

概念和进阶主题

支持

致用户:本文档主要面向开发者。如果您在使用我们的产品时遇到问题,请查阅帮助中心或提交工单。

相关仓库


立即体验

Last updated on