4.5 KiB
StarCloud Flutter SDK 示例
本示例用于验证 flutter_sdk 的移动端集成流程,包含 SDK 认证、测试云账户、蓝牙扫描/配对、基础锁控制、网关 WiFi 配网,以及视频对讲监控与来电处理。
示例用于联调和能力演示。生产项目必须自行实现账号体系、密钥保护、错误提示、权限说明与日志脱敏。
环境
- Flutter 3.19.6(项目通过 FVM 管理)
- Android 真机或 iOS 真机
- 已按根目录 README 配置蓝牙、定位、网络、麦克风和相机权限
- 需要具有读取相关私有 Gitea 仓库的权限;底层 SDK 与
video_decode_plugin会按pubspec.yaml固定的 Git 提交拉取
安装依赖并运行:
fvm use 3.19.6
fvm flutter pub get
fvm flutter run
不需要先进入 video_decode_plugin 执行 fvm flutter pub get:执行本目录的 fvm flutter pub get 会按固定 Git 提交递归解析其依赖。只有修改插件源码或运行插件自身示例时,才进入插件目录单独执行该命令。
若只做代码检查:
fvm dart analyze
使用流程
1. 登录
在“登录”页填写在星云平台注册后获得的 client_id 与 client_secret,点击:
第1步:注册星云账号得到client_id和client_secret初始化SDK
环境地址已写在示例代码中:
https://cloud.skychip.top/sdk
随后点击“第2步:仅测试创建新的 SDK 星云账户”。生产环境请替换为业务后台下发的 CloudUserInfo,不要将测试账户创建逻辑直接发布。
如需网关配网,再输入锁主账号/管理员账号并点击:
第3步:填写app登录账号支持WIFI授权账号
该账号的授权令牌仅用于 WiFi 网关配网,不能代替 SDK 云账户。
2. 设备扫描与配对
进入“设备扫描”页,点击“扫描”。每条扫描结果会直接显示:
配对:可对该设备发起配对;已配对:当前设备已匹配本地配对锁,不会重复配对。
配对成功后可在“蓝牙控锁”页验证基础开锁、关锁能力。
3. WiFi 配网
进入“WiFi配网”页,按顺序操作:
- 点击“第1步:初始化视频对讲”,生成 App PeerID;
- 输入 WiFi SSID、密码;
- 点击“第2步:wifi配网”。
配网下发成功后,锁仍可能需要 30–60 秒联网。示例会查询网关状态并轮询云端锁信息;在锁的 isOnline 为 true 且 peerId 非空之前,不能保证监控可用。
4. 视频对讲
“视频对讲”页不再提供初始化入口;请先在“WiFi配网”页完成第 1 步。该页提供:
- 锁 PeerID 自动回填与手动输入;
监控、挂断;- 来电接听/拒绝卡片;
- H264 视频 Texture 渲染、状态与诊断日志。
示例通过 video_decode_plugin 选择 FFmpeg 解码后端。启动监控时日志应包含:
[DIAG] recreateDecoder preferred=ffmpeg selected=ffmpeg
[DIAG] decoder active engine=ffmpeg
若日志显示 mediacodec,说明运行的不是当前 FFmpeg 配置;请确认已解析 video_decode_plugin 的指定 Git 提交、重新构建 APK,并确认未使用旧产物。
示例配置位置
| 配置 | 文件 | 说明 |
|---|---|---|
| 星云环境地址 | lib/tabs/auth_tab.dart |
示例固定为测试环境地址;按已授权环境修改 |
| 视频对讲服务地址 | lib/services/video_talk_initializer.dart |
示例固定地址;生产按服务分配修改 |
| WiFi SSID/密码 | 页面输入 | 不设默认值,也不会保存 |
| FFmpeg 视频渲染 | lib/tabs/video_talk_tab.dart |
初始化前后校验活动引擎为 ffmpeg |
重要说明
- 请不要向代码仓库提交真实
client_secret、账号密码、访问令牌、蓝牙密钥或视频凭据。 - Android 模拟器不适合测试蓝牙扫描、配对和 WiFi 配网;请使用真机。
- 监控超时通常由锁未联网、锁端
peerId未上报、网关未完成配网或锁端未回复对讲协商造成。 - 示例目前不包含生产级账号持久化、异常恢复、埋点或 UI 设计,应按业务要求实现。
目录
lib/
├── tabs/ # 登录、扫描、锁控、WiFi、视频对讲页面
├── services/
│ ├── cat_eye_monitor_service.dart
│ └── video_talk_initializer.dart
├── global.dart # 跨页面的锁、PeerID、授权状态
└── main.dart # 页面导航与 SDK bootstrap