Auf dieser Seite
Verbindungsabbrüche und Wiederverbindung
Das Abziehen des USB-Kabels, ein BLE-Signalverlust, ein Bluetooth-Reset oder ein Firmware-Neustart können die Verbindung unterbrechen. Beenden Sie den unterbrochenen Vorgang, verbinden Sie das Gerät erneut und verwenden Sie die ausgewählte Wallet sicher weiter.
Was das SDK bereits übernimmt
- Bei normaler Trennung / Wiederverbindung ändert sich das bestätigte
connectProtocolnicht. Nach einem Abbruch wählen Sie nicht erneut zwischen V1 und V2. - Laufende Aufrufe schlagen fehl. Das SDK wiederholt Signieren, Löschen oder Firmware-Updates nicht.
- Protocol V2 hält die Aufrufreihenfolge pro Gerät ein. Starten Sie keinen zweiten fachlichen Aufruf, solange der erste wiederhergestellt wird.
Was Sie tun müssen
- Abonnieren Sie
DEVICE.CONNECT/DEVICE.DISCONNECTeinmal beim App-Start. - Bei
DISCONNECTmarkieren Sie dieseconnectIdals beschäftigt/ungültig und beenden Sie den aktuellen UI-Ablauf mit Fehler. Wiederholen Sie dieselbe Methode mit Nebenwirkungen nicht. - Erneut suchen (
searchDevices), wenn der Nutzer bereit ist. Erneutes USB-Anschließen und BLE-Koppeln können eine neueconnectIderzeugen. Speichern Sie USB- und BLE-IDs getrennt zwischen. Siehe Kennungen. - Aktualisieren Sie nach einer neuen Verbindung den Gerätestatus mit
getDeviceState. Verwenden Sie gespeichertedeviceId + passphraseState; speichern Sie keine Firmware-session_id. - Übergeben Sie beim nächsten Adress-/Signieraufruf den gespeicherten
passphraseStateoderuseEmptyPassphrase: true. Core setzt die Firmware-Sitzung innerhalb dieser Methode fort. Öffnen Sie nicht allein zur Wiederverbindung eine Wallet-Sitzung erneut.
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-spezifisch
- Berechtigungen (
BLUETOOTH_SCAN/CONNECT, iOS-Bluetooth-Nutzungstexte, oft Standort unter Android) müssen auch nach Prozessende weiterhin erteilt sein. Siehe React Native BLE. retryCount/timeoutsteuern den Verbindungsaufbau vor einem Geräteaufruf. Sie wiederholen kein Signieren und ersetzen keine Wiederherstellung auf Anwendungsebene.- Wenn die Betriebssystemkopplung veraltet ist, stoppen Sie wiederholte Verbindungsversuche. Bitten Sie den Nutzer, das Gerät in den System-Bluetooth-Einstellungen zu entfernen und erneut zu koppeln.
- Mini hat kein BLE. Neo hat BLE, aber keine Kamera. Siehe Geräte.
USB-spezifisch
- WebUSB benötigt eine Nutzeraktion, um die Auswahl erneut anzuzeigen, sofern Sie nicht
skipWebDevicePromptbei einem weiterhin autorisierten Gerät übergeben. Siehe Gemeinsame Parameter. - Wenn ein anderer Tab oder Bridge das Gerät belegt, kann ein Übernahme-/Öffnungsfehler auftreten. Schließen Sie die andere Verbindung; führen Sie nicht
dispose()als erste Reaktion aus.
dispose()
await HardwareSDK.dispose();Rufen Sie dispose() nur beim Beenden des SDKs oder beim Wechseln von env / Transport-Stack auf (zum Beispiel WebUSB → Low-Level). Dadurch werden alle Verbindungen und der Transport-Cursor von Protocol V2 verworfen.
Rufen Sie dispose() bei einem gewöhnlichen BLE-Abbruch oder USB-Abziehen nicht auf. Suchen und verbinden Sie erneut mit derselben HardwareSDK-Instanz.
Nach dispose() müssen Sie init() erneut aufrufen, bevor Sie searchDevices verwenden.
Firmware-Neustart
firmwareUpdateV2 / V3 / V4 kann die Verbindung absichtlich trennen. Warten Sie, verbinden Sie erneut und lesen Sie dann die Versionen. Behandeln Sie diesen Abbruch nicht als fehlgeschlagenes Update, das wiederholt werden muss. Siehe Firmware-Update.