品类管理: 新建 product_category 品类字典表(V25, 灌入 8 个预设品类并回填存量 product.category), 后端提供 ProductCategory 增删改查/启停/字典接口, 后台新增「品类管理」页面(设备管理组, 与产品管理同级), 产品管理的品类下拉改为读字典(失败回退内置枚举)。 孤儿设备根治: TuyaController.bindDevices 收口三道校验 —— 绑定门禁(本平台未绑定涂鸦账号直接拒绝)、归属白名单(上报设备须在该用户涂鸦账号真实清单内, 拉取失败降级放行)、owner 校验(他人名下设备不改写; 恢复已删设备时归属改到当前用户)。 兜底自愈: 新增 OrphanTuyaDeviceCleanupTask, 每天 04:30 回收无绑定记录用户的涂鸦设备与 AI 档案(逻辑删除, 可恢复)。 Android: 查看设备时的补同步先确认后端绑定状态, 未绑定不再写库; 同步被拒时记录原因而非静默失败。单测 TuyaControllerBindTest 5 用例覆盖门禁/白名单/owner/恢复归属。
XHai 智能物联 - Android 客户端
基于涂鸦 Thing Smart Home SDK 7.5.0 原生开发的 Android 客户端。 实现:用户登录(iotsaas 后端)+ 涂鸦账号绑定/授权。
一、功能范围(当前阶段)
| 功能 | 状态 | 说明 |
|---|---|---|
| 用户登录 | ✅ | 对接 iotsaas 后端 POST /api/v1/auth/member/login |
| 用户注册 | ✅ | 对接 POST /api/v1/auth/member/register |
| 涂鸦账号绑定 | ✅ | 涂鸦原生 SDK 登录,绑定后同步 tuya_user_binding |
| 涂鸦账号解绑 | ✅ | 对接 POST /api/v1/tuya/auth/unbind |
| 绑定状态查询 | ✅ | 对接 GET /api/v1/tuya/auth/status |
| 设备管理/控制 | ⏳ | 走通绑定后再开发 |
二、环境要求
- Android Studio(Hedgehog 或更新版本)
- JDK 17(涂鸦 SDK 需要)
- Android SDK(API 34)
- NDK(
arm64-v8a、armeabi-v7a)
三、涂鸦平台配置(必须完成)
⚠️ 关键:涂鸦 SDK 初始化要求
AppKey、AppSecret、包名、签名 keystore 的 SHA256 四项全部与涂鸦平台登记一致,否则报illegal client。
1. 确认 App 授权信息
登录 涂鸦开发者平台 → 云开发 → 你的项目 → App 授权:
- AppKey(Client ID):
wuvw788psccvxndpyxnv - AppSecret(Client Secret):需确认
- 包名:
com.xhai.iot
2. 配置签名证书 SHA256
涂鸦 SDK 校验应用签名。必须把打包用 keystore 的 SHA256 配置到涂鸦平台对应 App 的"Android 签名证书"里。
本项目已生成开发用 keystore:app/xhai_iot.jks(密码 xhai123456,alias xhai)
- SHA256:
F0:D1:85:41:CD:D2:21:E2:84:77:FF:E1:A4:CF:F7:19:41:D4:8A:BD:B7:77:83:F2:C0:DB:CE:FB:69:25:F6:13 - SHA1(涂鸦 identifier 用):
0C44B4A0C696BC823B5BEFD52B16CFBF7D169B78
⚠️ 注意:涂鸦平台"App授权"里的 identifier(SHA1+包名)必须与打包签名一致。若涂鸦后台已配置了其他 keystore 的 SHA1,请使用那个 keystore 替换
app/xhai_iot.jks,或在涂鸦后台更新 SHA1。
四、构建步骤
方式一:Android Studio(推荐)
- 用 Android Studio 打开
f:/work/iotsaas/Android文件夹 - Android Studio 会自动下载 Gradle、AGP、涂鸦 SDK 依赖(需网络)
- 等待首次 Gradle Sync 完成
- 连接手机,点击 Run
方式二:命令行
cd Android
gradle assembleDebug
五、关键配置文件
| 文件 | 作用 |
|---|---|
app/build.gradle |
依赖、签名、ABI 配置 |
app/src/main/AndroidManifest.xml |
AppKey/AppSecret、Activity 注册 |
app/src/main/java/.../data/ApiConfig.java |
后端地址、涂鸦密钥 |
app/src/main/java/.../TuyaApplication.java |
涂鸦 SDK 初始化 |
app/src/main/java/.../ui/TuyaBindActivity.java |
涂鸦登录+绑定 |
六、API 对接(iotsaas 后端)
| 后端接口 | 方法 | 作用 |
|---|---|---|
/api/v1/auth/member/login |
POST | 登录 |
/api/v1/auth/member/register |
POST | 注册 |
/api/v1/tuya/auth/status |
GET | 涂鸦绑定状态 |
/api/v1/tuya/auth/bind-native |
POST | 绑定同步 |
/api/v1/tuya/auth/unbind |
POST | 解绑 |
所有涂鸦接口需要
Authorization: Bearer <token>头。
七、常见问题
Q1: 启动报 illegal client
检查 AppKey/AppSecret/包名/keystore SHA256 四项与涂鸦平台是否一致。
Q2: 绑定同步失败
检查后端是否已登录(token 有效)、tuya_user_binding 是否写入。
Q3: 涂鸦登录失败
确认涂鸦账号存在、网络正常、SDK 已初始化成功。