触发Tapkey锁扫描成功但返回Unauthorized未授权错误问题问询
- 校验身份ID匹配性:确认Token Exchange流程返回的用户ID,和Tapkey后台给当前锁分配权限的用户ID完全一致,注意ID字段大小写敏感,多数权限报错是二者不匹配导致。
- 检查令牌有效性:确认SDK获取到的身份令牌未过期,若你手动实现了令牌获取回调逻辑,需保证返回的是未过期、签名合法的有效令牌,令牌失效会直接触发Unauthorized错误。
- 核对SDK初始化参数:确认初始化时传入的OAuth客户端ID、自定义Identity Provider ID与Tapkey管理后台的配置完全一致,参数不匹配会导致身份校验链路中断。
- 同步锁端权限:若权限是刚分配的,先使用Tapkey官方APP连接一次锁完成权限同步,锁本地未同步最新权限列表也会拒绝授权。
代码优化建议
你当前的实现未对错误类型做细分,无法直观区分权限类错误和其他技术错误,可将实现修改为如下逻辑,方便调试定位:
private func triggerLock(physicalLockId: String) -> TKMPromise<Bool> { guard let bluetoothAddress = self.bleLockScanner.getLock( physicalLockId: physicalLockId)?.bluetoothAddress else { self.showAlert(title: "提示", message: "锁不在设备附近", okTitle: R.string.localizable.commonCancel(), cancelString: R.string.localizable.commonScanAgain(), cancelHandle: { _ in self.scanLock() }) return TKMAsync.promiseFromResult(false) } let ct = TKMCancellationTokens.fromTimeout(timeoutMs: 15000) return self.bleLockCommunicator.executeCommandAsync( bluetoothAddress: bluetoothAddress, physicalLockId: physicalLockId, commandFunc: { tlcpConnection -> TKMPromise<TKMCommandResult> in let triggerLockCommand = TKMDefaultTriggerLockCommandBuilder() .build() return self.commandExecutionFacade!.executeStandardCommandAsync(tlcpConnection, command: triggerLockCommand, cancellationToken: ct) }, cancellationToken: ct) .continueOnUi({ commandResult in let code: TKMCommandResult.TKMCommandResultCode = commandResult?.code ?? .technicalError switch code { case .ok: return true case .unauthorized: NSLog("解锁失败:当前用户无该锁访问权限") self.showAlert(title: "提示", message: "无解锁权限,请检查权限配置") return false default: NSLog("解锁失败,错误码:\(code.rawValue)") self.showAlert(title: "提示", message: "解锁失败") return false } }) .catchOnUi({ (_: TKMAsyncError) -> Bool in NSLog("触发解锁流程异常") self.showAlert(title: "提示", message: "解锁流程执行失败") return false }) }
内容的提问来源于stack exchange,提问作者Waqar Yazdani
相关产品推荐
相关产品推荐

