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

Flutter开发中TapKey Mobile SDK无法检测蓝牙锁问题求助

问题排查与解决方案

一、BLE锁扫描不到的问题

你当前的代码和流程存在几个关键疏漏,逐一排查:

1. 未主动启动BLE扫描

你的scanLocks()方法仅监听了locksChangedObservable,但没有调用TapKey SDK的启动扫描接口。TapKey的BleLockScanner需要主动触发扫描操作才会开始检测附近的锁,将以下代码添加到权限通过的分支中:

// 启动BLE扫描,用取消令牌控制扫描生命周期
val scanCts = CancellationTokenSource()
tapkeyServiceFactory.bleLockScanner.startScanAsync(scanCts.token)
    .catchOnUi { error -> println("扫描启动失败: ${error.cause}") }

注意在不需要扫描时调用scanCts.cancel()停止扫描,避免资源浪费。

2. 权限申请逻辑缺失

你的代码仅检查权限,但未在权限未授予时触发运行时权限申请。若用户未授权蓝牙权限,扫描逻辑会直接返回,无法触发权限弹窗。修改权限检查分支:

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED ||
    ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
    // 触发权限申请弹窗
    ActivityCompat.requestPermissions(
        this,
        arrayOf(Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT),
        1001 // 自定义请求码
    )
    return
} else {
    // 启动扫描+监听逻辑
    val scanCts = CancellationTokenSource()
    tapkeyServiceFactory.bleLockScanner.startScanAsync(scanCts.token)
        .catchOnUi { error -> println("扫描启动失败: ${error.cause}") }

    tapkeyServiceFactory.bleLockScanner.locksChangedObservable
        .addObserver { locks -> println("检测到锁: $locks") }

    println("当前已发现锁: ${tapkeyServiceFactory.bleLockScanner.locks}")
    println("Permission granted")
}

若需要兼容Android 11及以下版本,还需添加ACCESS_FINE_LOCATION权限到AndroidManifest.xml,并在申请时包含该权限。

3. 锁的权限未分配给目标用户

你提到Client Credentials创建的用户被分配了锁权限,但通过Token Exchange登录的是云函数创建的新用户——这是两个独立的用户实体。请确认:

  • 云函数创建的用户是否被添加到锁的授权列表中
  • 是否通过TapKey API为该用户分配了锁的访问权限(例如调用/Locks/{lockId}/Authorizations接口)

4. 锁的状态验证

确认锁本身处于可连接状态:

  • 锁已完成激活流程
  • 锁电量充足(低电量可能关闭BLE广播)
  • 锁未处于休眠或锁定状态

二、找不到云函数创建的用户的问题

通过Owners/{ownerAccountId}/IdentityProviders/{ipId}/Users路径创建的用户属于自定义身份提供商下的用户,在my.tapkey.com后台的默认用户列表中不会直接显示。你可以通过以下方式查看:

  • 调用TapKey Management API的/Owners/{ownerAccountId}/IdentityProviders/{ipId}/Users接口,查询该身份提供商下的所有用户
  • 若需要在后台可视化查看,需为该用户添加联系人信息(姓名、邮箱等),添加后用户会出现在后台的用户列表中

内容的提问来源于stack exchange,提问作者czapelM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:15:35