Files
conti-docs/POC/uniappX-poc.md
T

134 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Continental Retail APP | uni-app x 鸿蒙 PoC 验证结论
## 0. 结论摘要
> **验证范围:** 本文记录 uni-app x(蒸汽模式)在鸿蒙侧的 PoC 结果。Android 和 iOS 是工程目标平台,但本文不包含其详细验证结果;当前结果也不等同于正式生产可用。
| 验证项 | 当前结果 | 状态 |
| --- | --- | --- |
| 三端工程(鸿蒙侧构建) | 本地打包、unsigned 包构建、DevEco Studio 安装启动通过 | 通过 |
| 登录与会话 | Storage、生命周期、前后台会话恢复通过 | 通过 |
| 扫码与权限 | 可拉起扫码界面;结果回传和权限恢复待验证 | 部分通过 |
| 定位 | `Failed to get provider`,未获得定位结果 | 失败/受阻 |
| 推送与深链 | `getPushClientId` 返回 `errCode: 15032`;应用内深链可单独验证 | 受阻 |
| 文件链路 | 相册、下载、本地预览基础链路通过 | 基础通过 |
| ERP H5 | 本地 H5 与 JSBridge 基础通信通过 | 基础通过 |
| 维护演练 | 重复打包前需手动删除旧工程目录 | 需人工介入 |
**当前状态:** 工程构建、会话、文件和基础 WebView 链路已验证;扫码已能进入系统能力,但尚未形成完整闭环;定位和推送存在明确阻塞。
**未闭环事项:** 扫码结果回传与权限回收后的二次申请;具备定位服务真机上的定位能力;Push Client ID、前后台消息和通知点击深链;拍照、外部文件打开、复杂 URI、真实 ERP/SSO、网络环境及长期后台恢复。
## 1. 验证范围与说明
本 PoC 重点确认鸿蒙侧工程能否构建、安装和运行,常用业务能力能否接入,问题能否复现定位,以及单人维护和发布的实际成本。
验证对象为 uni-app x(蒸汽模式)工程;涉及的目标平台为 Android、iOS 和鸿蒙,本文当前仅记录鸿蒙侧验证结果。
## 2. 验证结果
### 2.1 工程与鸿蒙构建
**结论:通过。** 鸿蒙本地打包、unsigned 包构建,以及通过 DevEco Studio 安装和启动均已跑通,当前构建链路无阻塞。
![HBuilderX 鸿蒙本地打包菜单](images/packing1.png)
![鸿蒙 unsigned 包构建成功](images/packing2.png)
![DevEco Studio 安装并启动鸿蒙 App](images/packing3.png)
### 2.2 登录与会话
**结论:通过。** 鸿蒙下 Storage 读写稳定;`onShow`/`onHide` 生命周期可用;App 从后台恢复后能够刷新过期会话,退出登录可清理存储。当前 PoC 使用普通 Storage,正式版仍需单独评估鸿蒙加密存储能力。
![未登录状态](images/maintain0.png)
![模拟登录成功](images/maintain1.png)
![Token 刷新](images/maintain2.png)
![前台恢复](images/maintain3.png)
![退出登录并清理存储](images/maintain4.png)
### 2.3 扫码与权限
**结论:部分通过。** `uni.scanCode` 可拉起鸿蒙扫码界面,扫码 API、页面调用链和相机能力接入基本可用。系统出现 `Limited access to camera`,表明相机处于受限授权状态;当前尚未证明二维码/条码结果回传成功,也未验证权限被回收后的二次申请。
![通知权限弹窗](images/permission0.png)
![进入扫码界面](images/permission1.png)
![相机受限授权提示](images/permission2.png)
### 2.4 定位
**结论:失败/受阻。** 调用 `uni.getLocation({ type: 'wgs84' })` 后返回:
```text
getLocation:fail Failed to get provider
```
工程已声明 `uni-location` 和 `ohos.permission.LOCATION`,但当前 Harmony 环境没有返回可用定位 provider,未获得经纬度和精度。该结果尚不能确认 uni-app x 鸿蒙定位能力可用于正式业务,需在具备定位服务的真机上复测,并核对框架、插件和 Harmony 版本兼容性。
![定位 provider 获取失败](images/location-error.png)
### 2.5 推送与深链
**结论:推送受阻;应用内深链可单独验证。** 调用 `getPushClientId` 返回:
```text
getPushClientId: fail
errCode: 15032
```
由于未获得有效 Push Client ID,`onPushMessage`、前后台消息到达、关闭态通知点击和通知深链均未形成完整验证。页面内 query 参数跳转只能证明应用内路由承接,不能替代真实通知点击测试。
![Push Client ID 获取失败](images/push0.png)
### 2.6 文件链路
**结论:基础链路通过。** 相册选择可返回临时文件路径并在应用内预览;下载可返回 HTTP 状态码和本地临时路径,结果也能正常渲染。拍照、PDF/Office 外部打开和复杂 URI 兼容性仍需真机复测。
![相册选择、下载和预览成功](images/file-chain.png)
### 2.7 ERP H5
**结论:基础链路通过。** 本地 H5 加载和 H5 → Native JSBridge 通信已验证。鸿蒙 WebView 注入的是 `window.__uniapp_x_`,不是常见的 `window.__uniapp_x_postMessage`,因此实现时需要按平台做兼容判断。真实 ERP、SSO、网络环境和长期后台恢复仍需复测。
![JSBridge 通信成功](images/js_bridge.png)
### 2.8 维护演练
**结论:需人工介入。** 修改代码后重新本地打包鸿蒙工程时,若上一次生成的工程目录仍存在,会出现无法删除旧工程的错误;需手动清理后才能重新打包,增加单人维护和发布成本。
![重复打包错误](images/hbuilder-repacking-issue.png)
## 3. 开发工具链问题
以下观察不属于业务功能本身,但会影响工具链选择、开发效率和单人维护成本。
### 3.1 HBuilderX AI 工具模型支持有限
**POC 观察:** HBuilderX 自带 AI 开发工具可选模型较少,当前主要为 DeepSeek 和智谱两类模型。团队难以统一接入既有模型账号或第三方模型服务,工具的扩展性和可替代性有限。
![HBuilderX AI 工具模型列表](images/hbuilder-ai-agent.png)
### 3.2 HBuilderX AI 工具使用成本较高
**POC 观察:** HBuilderX AI 工具采用订阅收费模式,套餐价格较高。多人长期使用时会增加研发成本,正式引入前需结合使用频率、额度和团队规模评估投入产出比。
![HBuilderX AI 工具收费信息](images/hbuilder-ai-agent-cost.png)
### 3.3 鸿蒙工程重复打包需要人工清理
**POC 观察:** 修改代码后重新打包时,HBuilderX 可能无法自动删除上一次生成的工程目录;该问题已在[2.8 维护演练](#28-维护演练)中复现。重复构建流程不够顺畅,会增加构建失败排查和单人发布的额外操作成本。
### 3.4 打包过程反馈不清晰
**POC 观察:** 打包出错时,HBuilderX 的过程反馈、结束状态和进度展示不够明确。开发者难以判断任务是在执行、等待还是已失败,容易重复点击或误判构建状态,降低问题定位效率。
![HBuilderX 打包过程反馈问题](images/hbuilder-repacking-issue.png)
### 3.5 HBuilderX 插件下载收费且存在广告
**POC 观察:** HBuilderX 插件市场中部分插件下载需要付费,插件列表和下载页面中还存在广告内容。团队获取所需能力时可能产生额外费用,正式引入前需评估所需插件的付费情况。
![HBuilderX 插件下载收费和广告](images/HbuilderX-plugin.png)
### 3.6 本章结论
开发工具链和鸿蒙打包体验存在改进空间。上述问题不否定已验证的业务能力,但会增加工具成本、构建等待成本和单人维护成本,应纳入后续工具链和发布流程评估。