You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

触发Tapkey锁扫描成功但返回Unauthorized未授权错误问题问询

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:45:09