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.ktauthenticateAndInitializeDefaults(...)AT+CHALLENGEchallenge 发送- challenge 响应解析 / 验签
- DID 等待与读取
UART 认证相关
apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/XTalkMeshUiApp.ktAT+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=1和AT+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,
)
认证成功的判定边界
认证层成功应至少满足:
AT+CHALLENGE=<hex>已发送- 设备返回可解析 challenge 响应
- 签名校验通过
- DID 读取成功
不应把下面这些条件揉进认证成功定义:
- 频点写入成功
RATE / BCN / ADDTL / WORKMODE成功- 厂家硬件配置成功
这些都属于 Init SDK。
推荐调用顺序
BLE
XTalkBleClient.connect(...)DeviceAuthenticator.authenticateBleAndReadDidExclusive(...)DeviceInitializer.initializeBleWirelessDefaults(...)
UART
XTalkUartClient.open(...)DeviceAuthenticator.authenticateUartAndReadDid(...)DeviceInitializer.initializeUartDefaultsAfterAuth(...)DeviceInitializer.initializeUartVendorConfigAfterAuth(...)
目标模块位置
推荐拆分后放到:
- Gradle 模块:
apps/android-ui/device-auth-sdk - 包名:
com.xtalk.mesh.sdk.auth
这两项当前尚未在仓库中落地。