En esta página
Desconexiones y reconexión
Desconectar el USB, perder la señal BLE, restablecer Bluetooth o reiniciar el firmware puede interrumpir una conexión. Sigue estos pasos para finalizar la operación interrumpida, reconectar el dispositivo y reutilizar la cartera seleccionada de forma segura.
Qué hace ya el SDK
- Una desconexión/reconexión normal no olvida el protocolo confirmado
connectProtocol. No vuelves a seleccionar V1 o V2 después de una desconexión. - Las llamadas en curso fallan. El SDK no repite firmas, borrados ni actualizaciones de firmware.
- Protocol V2 conserva el orden de llamadas por dispositivo. No solapes una segunda llamada funcional mientras se recupera la primera.
Qué debes hacer
- Suscríbete a
DEVICE.CONNECT/DEVICE.DISCONNECTuna vez al iniciar la aplicación. - Ante
DISCONNECT, marca eseconnectIdcomo ocupado/inválido y termina el flujo actual con error. No repitas el mismo método con efectos secundarios. - Vuelve a buscar (
searchDevices) cuando el usuario esté preparado. Volver a conectar USB o emparejar BLE puede generar un nuevoconnectId. Guarda en caché los identificadores USB y BLE por separado. Consulta Identificadores. - Después de una nueva conexión, actualiza el estado del dispositivo con
getDeviceState. Reutiliza el valor guardado dedeviceId + passphraseState; no guardes de forma persistente elsession_id. - En la siguiente llamada de dirección/firma, envía el valor persistido de
passphraseStateouseEmptyPassphrase: true. Core reanuda la sesión del firmware dentro de ese método. No vuelvas a abrir una sesión de cartera solo para reconectar.
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();
});Específico de BLE
- Los permisos (
BLUETOOTH_SCAN/CONNECT, textos de uso de Bluetooth de iOS y, a menudo, ubicación en Android) deben seguir concedidos tras finalizar el proceso. Consulta React Native BLE. retryCount/timeoutcontrolan el establecimiento de conexión antes de una llamada al dispositivo. No reintentan la firma ni sustituyen la recuperación a nivel de aplicación.- Si la vinculación del sistema está obsoleta, detén los intentos en bucle. Pide al usuario que olvide el dispositivo en los ajustes Bluetooth y vuelva a emparejarlo.
- Mini no tiene BLE. Neo tiene BLE pero no cámara. Consulta Dispositivos.
Específico de USB
- WebUSB necesita una acción del usuario para volver a mostrar el selector, salvo que envíes
skipWebDevicePrompten un dispositivo todavía autorizado. Consulta Parámetros comunes. - Otra pestaña o Bridge puede estar usando el dispositivo y provocar un error al adquirirlo/abrirlo. Cierra esa conexión; no uses
dispose()como primera respuesta.
dispose()
await HardwareSDK.dispose();Llama a dispose() solo al cerrar el SDK o cambiar env o la pila de transporte (por ejemplo, de WebUSB a bajo nivel). Elimina todas las conexiones y el cursor de transporte de Protocol V2.
Recuerda: no llames a dispose() ante una interrupción BLE o desconexión USB rutinaria. Busca y conecta de nuevo en la misma instancia del SDK HardwareSDK.
Después de dispose(), debes llamar a init() de nuevo antes de searchDevices.
Reinicio de firmware
firmwareUpdateV2 / V3 / V4 puede desconectar deliberadamente. Espera, vuelve a conectar y lee las versiones. No interpretes esa interrupción como una actualización fallida que debe repetirse. Consulta Actualización del firmware.