微信蓝牙锁小程序流程分析
2021-04-12 20:38:16 11 举报
微信蓝牙锁小程序流程,细致解剖各个具体细节
作者其他创作
大纲/内容
重试
扫码得到的mac与此人正在用的锁mac是否一致?
修改订单状态为FINISH
用pwd2挨个授权锁
否
失败
开锁
当前锁mac地址确定优先顺序:1. 获取此人当前使用中订单中的mac2. 扫描二维码获得的mac + 微信扫码通过app.js扫码获得(小程序不在缓存) + 微信扫码通过/pages/index/index获得 + /pages/index/index中扫码按钮扫描获得
成功
DRAFT需要自动开锁
pages/index/index:onShow
管理员重置锁流程
关闭锁连接
点击退出
创建初始化订单DRAFT
小程序在缓存中?
支付失败界面
是
触发变化
index componentDidShow
用pwd1授权锁
无
已授权
关闭蓝牙扫描
锁进入可操作状态(开锁/获取电量/获取锁闭合状态/设置密码)
有
onBluetoothAdapterStateChange回调函数更新蓝牙适配器开闭状态到state
搜索此人的所有使用中的锁列表及所扫描的锁
发confirmpwd命令到server确认修改密码成功
开启蓝牙扫描倒计时
普通用户开锁流程
已获得mac
提示用户可以开锁离开(或自动开锁离开)
是否已经扫描获得了/setting/mac地址?
中止完成
pages/index/index:onHide
Y
根据订单状态做不同处理
获取锁信息及相关锁的所有未支付订单列表(实际只有一个)
一致
蓝牙是否正在扫描?
中止开锁流程
开启扫描
未打开
橙色线框部分为ios蓝牙搜索流程
临时方案:提示完成
app componentDidShow
判断蓝牙是否打开?
修改订单状态为INUSE
不一致
index componentWillUnmout
授权是否成功?
当前是否有数据要清理?
倒计时30秒等待扫描到指定MAC地址的锁
其他
进入开锁流程
index componentWillMount
index componentDidHide
此处为预先开锁流程(更应称之为锁授权流程)
调用app:componentDidShow
读取DEV_INFO
管理员修改锁密码流程开始
取消等
app componentDidMount
锁是否连接?
有限状态模式分析状态列表:1. 登录中2. 获取订单中3. 开锁中4. 开锁成功/失败外部事件列表:1. 微信扫码进入2. 小程序onShow进入3. 小程序onHide退出4. 微信小程序菜单中进入5. 蓝牙关闭事件6. 蓝牙打开事件内部事件列表:1. 小程序中扫码2. 登录成功/失败3. 获取订单信息成功/失败4. 开锁按钮触发开锁5. 中止开锁按钮触发中止
关闭扫描
标记订单为已完成CLOSE
update view with init datapages/index/index:onLoad
pages/index/index:onReady
用户自己判断是正常关闭锁还是强制关闭订单?
清理数据
进入小程序
初始化蓝牙成功
用户小程序中扫码
连接失败导致开锁失败
开始
连接锁
componentWillReceiveProps监听到store中adapter的状态变化
index render
正常关闭
授权失败导致开锁失败
app route: pages/index/indexpages/index/index: onUnload
N
调用index:componentDidShow
是否查询到目标锁deviceInfo?
开锁失败界面
扫码超时导致开锁失败
开启扫码失败导致开锁失败
无需自动开锁
微信扫一扫锁上二维码(http://d.qingshansi.cn/weapp/lock/qr?mac=112233445566)
app route: pages/index/indexpages/index/index:onLoad
正式方案:进入支付
INUSE
此人正在用锁?
app componentDidHide
app componentWillMount
App:onShow
开锁失败
已连接
强制关闭
得到此人当前订单的锁mac地址
清除/setting/mac 和/ble/currentMac进入未使用状态
用户支付成功
App:onLaunch
直接点击微信小程序图标进入小程序
提示用户去座位等待到站后开锁取行李
去开
当前正在扫描?
开始中止开锁流程
进入应用程序初始化入口页app.js
用户打开后
找到此mac锁的正在使用中订单列表
超时
设置锁失败
当前是否有锁连接?
结束
index componentDidMount
设置当前锁state: ble/currentMac
App:onHide
初始化蓝牙完成
清除当前扫描mac地址:/setting/mac
正在用锁
完成
触发检查是否自动开锁的时机:1. 蓝牙适配器由不可用变为可用2. 从服务器获取订单列表返回(已包含了用户扫码进入小程序)3. 用户在小程序中扫码4. 用户通过微信扫一扫进入小程序(是否包含在2中待测试?)
小程序冷启动流程
提示后续可以自行查看订单状态
弹框提示用户打开蓝牙界面
此锁是否有未完成订单?(其他人使用中)
不开
开锁成功
轮询授权是否成功?超时2秒后认为失败
计算及查询到目标锁mac对应在state: /ble/deviceInfo中的设备信息
未授权
小程序隐藏过程
搜是否授权?
用户进入系统设置打开蓝牙
修改密码为pwd2
小程序重新开启过程
未用锁
小程序微信扫码重新进入过程(注意会调用onLoad去解析query)
index componentWillReceiveProps
已打开
0 条评论
下一页