val seamSDK = SeamSDK.getInstance()
// Subscribe before calling unlock
lifecycleScope.launch {
seamSDK.unlockStatus.collect { event ->
when (event) {
is SeamUnlockEvent.ScanningStarted -> {
showScanningSpinner()
}
is SeamUnlockEvent.AccessGranted -> {
hideScanningSpinner()
showSuccessBanner()
}
is SeamUnlockEvent.Timeout -> {
hideScanningSpinner()
showTimeoutError()
}
is SeamUnlockEvent.ReaderError -> {
hideScanningSpinner()
// event.message contains diagnostic details
showReaderError()
}
}
}
}
// Then perform the unlock
try {
seamSDK.unlock(
credentialId = credential.id!!,
unlockProximity = UnlockProximity.TOUCH
)
} catch (seamError: SeamError) {
// Handle synchronous errors thrown before scanning begins
handleUnlockError(seamError)
}