跳到主要内容

Android Device Auth SDK

当前代码位置

当前仓库里还没有独立 DeviceAuthenticator.kt。BLE 认证主要混在 XTalkBleClient.authenticateAndInitializeDefaults(...) 中,UART 认证主要位于 XTalkMeshUiApp.kt。本文按 SDK 边界说明认证层该放什么、不该放什么,并映射到当前代码位置。

当前实现位置

BLE 认证相关

  • apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/ble/XTalkBleClient.kt
    • authenticateAndInitializeDefaults(...)
    • AT+CHALLENGE challenge 发送
    • challenge 响应解析 / 验签
    • DID 等待与读取

UART 认证相关

  • apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/XTalkMeshUiApp.kt
    • AT+CHALLENGE=<hex>
    • AT+EFUSESN?
    • fallback AT+SN?

Auth SDK 应负责什么

  • 生成 AT+CHALLENGE=<hex> challenge
  • 发送 challenge
  • 解析 challenge 响应
  • 验证签名
  • 读取 DID
  • 返回认证结果

Auth SDK 不应负责什么

  • BLE 扫描和连接
  • AT+ADDTL / AT+FREQ / AT+RATE / AT+BCNID / AT+WORKMODE
  • UART 厂家配置,如 AT+RFSW / AT+OEM / AT+TXP
  • Mesh 数据业务编排
  • 页面提示与 UI 状态

当前代码可确认的认证语义

BLE

当前 XTalkBleClient.kt 里:

  • 会等待 BLE ready
  • 会跑 AT+CHALLENGE
  • 会解析与验签 challenge 响应
  • 会等待 DID
  • 之后还会继续写默认参数

因此它目前是“认证 + 初始化”混合实现,不是纯 Auth SDK。

UART

当前 XTalkMeshUiApp.kt 里:

  • 先发 AT+CHALLENGE
  • 之后读 AT+EFUSESN?
  • 失败后 fallback AT+SN?
  • 再继续执行 AT+ADDTL=1AT+RFSW=1,6,1,1

因此它同样不是纯 Auth SDK,而是“认证 + 部分初始化”混合实现。

目标拆分后的推荐认证 API

object DeviceAuthenticator {
fun authenticateBleAndReadDidExclusive(
timeoutMs: Long = 30_000L,
forceReauth: Boolean = false,
): Boolean

fun authenticateUartAndReadDid(
transport: AtCommandTransport,
challengeTimeoutMs: Long = 10_000L,
didTimeoutMs: Long = 6_000L,
): Result
}

推荐的 Result 语义:

data class Result(
val ok: Boolean,
val deviceLongId: Long?,
val reason: String,
)

认证成功的判定边界

认证层成功应至少满足:

  1. AT+CHALLENGE=<hex> 已发送
  2. 设备返回可解析 challenge 响应
  3. 签名校验通过
  4. DID 读取成功

不应把下面这些条件揉进认证成功定义:

  • 频点写入成功
  • RATE / BCN / ADDTL / WORKMODE 成功
  • 厂家硬件配置成功

这些都属于 Init SDK。

推荐调用顺序

BLE

  1. XTalkBleClient.connect(...)
  2. DeviceAuthenticator.authenticateBleAndReadDidExclusive(...)
  3. DeviceInitializer.initializeBleWirelessDefaults(...)

UART

  1. XTalkUartClient.open(...)
  2. DeviceAuthenticator.authenticateUartAndReadDid(...)
  3. DeviceInitializer.initializeUartDefaultsAfterAuth(...)
  4. DeviceInitializer.initializeUartVendorConfigAfterAuth(...)

目标模块位置

推荐拆分后放到:

  • Gradle 模块:apps/android-ui/device-auth-sdk
  • 包名:com.xtalk.mesh.sdk.auth

这两项当前尚未在仓库中落地。