适配版本:HarmonyOS 5.0.0 或以上
阅读目标:实现手机通过扫码连接 TV 或其他设备,完成身份绑定、Token 授权分发与权限控制,为分布式协同通信提供安全接入入口
🧠 一、典型使用场景
场景 | 描述 |
---|---|
手机扫码登录 TV 控制端 | 手机扫码 → 绑定 TV → 获取控制权限 |
新设备扫码加入协作白板 / 聊天室 | 扫码加入 → 成为成员之一 → 自动同步数据 |
手机扫码绑定摄像头 / IoT 控制设备 | 手机认证 → 控制权限 → 状态同步 |
🧩 二、扫码配对流程图
[TV 生成二维码] → 显示 token + TV ID
↓
[手机扫码解析] → 提交 token + TV ID 给后端/本地校验
↓
[验证通过] → 建立绑定关系,TV 和手机建立通信信任
📦 三、Token 生成与二维码展示(TV 端)
const token = genRandomToken()
const deviceId = getDeviceId()
const pairingInfo = JSON.stringify({ token, deviceId })
const qrData = base64Encode(pairingInfo)
// 生成二维码展示(推荐用二维码图片组件)
QRCode({ content: qrData })
📌 可限制 token 有效期 3 分钟,提升安全性
📲 四、手机扫码识别并发起绑定请求
function onScanSuccess(content: string) {
const decoded = JSON.parse(base64Decode(content))
const { token, deviceId } = decoded
// 模拟后端验证逻辑或通过分布式通信广播绑定请求
requestPairing(token, deviceId)
}
🔐 五、权限绑定机制(TV 端校验)
TV 端监听绑定请求:
kvStore.on('dataChange', SUBSCRIBE_TYPE_ALL, (change) => {
const entry = change.insertEntries[0]
if (entry.key.startsWith('pairing_req_')) {
const payload = JSON.parse(entry.value.value)
if (payload.token === currentToken) {
allowDevice(payload.fromDeviceId)
}
}
})
✅ 六、配对成功后状态存储
const pairingKey = `paired_device_${deviceId}`
kvStore.put(pairingKey, {
userId: payload.userId,
deviceId: payload.fromDeviceId,
pairedAt: Date.now()
})
📌 后续可用于权限校验:是否为绑定设备、是否允许发送控制指令等。
📄 七、配对状态 UI 提示(TV 和手机)
TV 端:
Text(`已绑定设备:${pairedDevices.length} 台`)
手机端:
Text('配对成功,您已获得控制权限')
🔁 八、配对过期 / 取消绑定机制
-
绑定时存储有效时间戳
expiresAt
-
定期清理已过期设备
-
提供 UI 入口主动“解绑设备”按钮
✅ 九、小结
模块功能 | 实现说明 |
---|---|
Token 生成与展示 | TV 生成 token → 展示为二维码 |
扫码绑定请求 | 手机扫码后解析二维码内容,提交绑定请求 |
权限绑定与认证 | TV 校验 token 与设备 ID,记录绑定状态并授权通信权限 |
状态持久化与安全控制 | 存储配对状态、设置有效期、支持解绑、限制通信操作 |
📘 下一篇预告
第19篇|TV 控制端服务封装:统一指令解析器 + 安全权限判断 + 控制能力插件化设计