Files
frontend-miniapp/doc/test-reports/h5-third-party-navigation-2026-07-13.md
lyf 140f13633e
Some checks failed
CI / verify (push) Has been cancelled
改造 H5 第三方地图导航
2026-07-13 16:56:18 +08:00

86 lines
5.6 KiB
Markdown
Raw Permalink 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.
# H5 第三方导航改造测试报告
- 日期2026-07-13
- 范围H5“来馆 -> 第三方导航”百度/高德原生 Scheme 调起
- 目的地:深圳自然博物馆
- 坐标GCJ-02 `22.692763, 114.363572`,直接复用 `MUSEUM_LOCATION`
## 实施结果
1. `navigateToMuseum` 与页面现有调用接口保持不变。
2. 点击“第三方导航”后调用 `uni.showActionSheet`,选项精确为“百度地图”“高德地图”。
3. 百度使用 `baidumap://`;高德按平台使用 iOS `iosamap://`、Android `androidamap://`
4. 百度 URL 显式携带 `coord_type=gcj02`;高德 URL 使用 `dev=0` 表示已偏移的 GCJ-02 坐标。
5. 中文目的地名称经过 URL 编码。
6. 用户取消选择时静默返回 `false`,不显示错误提示。
7. 未使用 `uni.openLocation`,未接入腾讯路线规划插件,未使用或新增腾讯位置服务 Key未增加中转页面未修改 `index.vue` 或宿主小程序代码。
8. 宿主小程序原有 `openWechatHostLocation` 分支未改动。
## TDD 证据
RED 阶段按行为逐项确认失败:
- 百度 URL 测试:`buildBaiduNavigationUrl is not a function`
- iOS 高德 URL 测试:`buildAmapNavigationUrl is not a function`
- Android 高德 URL 测试:返回空字符串,不匹配 `androidamap://route?`
- Action Sheet 测试:旧实现调用 `uni.openLocation`,失败为 `uni.openLocation is not a function`
- 百度标准目的地编码测试:旧 URL 未把 `latlng:...|name:...` 合并编码到 `destination` 参数。
GREEN 阶段:
```powershell
pnpm exec vitest run tests/unit/MapNavigationService.spec.ts
```
结果:`1 file / 7 tests passed`。覆盖百度 GCJ-02、iOS/Android 高德 Scheme、中文目的地编码、百度选择跳转、iPhone 高德选择跳转、取消静默返回。
## 已自动验证
| 验证项 | 命令或方式 | 结果 |
| --- | --- | --- |
| 导航服务与页面接线单测 | `pnpm exec vitest run tests/unit/MapNavigationService.spec.ts tests/unit/ArrivalPanel.spec.ts` | 通过,`2 files / 9 tests` |
| 全量单元测试 | `pnpm test:unit` | 通过,`14 files / 81 tests` |
| TypeScript 检查 | `pnpm type-check` | 通过,退出码 0零错误 |
| ESLint | `pnpm lint` | 通过0 errors1 个既有无关 warning`src/pages/explain/list.vue:72``explainBusinessUnitItems` 未使用 |
| H5 生产构建 | `pnpm build:h5` | 通过,`DONE Build complete`,静态资源复制成功 |
| 浏览器交互 | 生产构建静态服务 `http://127.0.0.1:4173/` | 真实点击“来馆 -> 第三方导航”后显示“百度地图”“高德地图” |
| 旧选择层清理 | 浏览器 DOM 检查 | `.provider-sheet` 数量为 0 |
| 取消行为 | Vitest | 返回 `false` 且未调用 `showToast` |
构建存在既有 HarmonyOS 字体解析提示和 Sass deprecation warnings均非错误。浏览器静态服务缺少 API 代理,出现既有 SGS 404 和腾讯地图鉴权日志,但“来馆”按钮与 Action Sheet 正常,不影响本次验证。
桌面浏览器仅验证选择框,没有选择原生 Scheme避免在没有地图 App 的环境中把调起结果误判为真机结果。
## 需要宿主小程序真机验证
以下项目必须在承载 H5 的宿主小程序 web-view 中验证。每次测试先进入“来馆”,点击“第三方导航”,确认只显示百度和高德两项。
| 设备 | 地图 App 状态 | 操作 | 期望结果 |
| --- | --- | --- | --- |
| Android | 已安装百度地图 | 选择“百度地图” | 通过 `baidumap://` 打开百度地图,目的地为深圳自然博物馆,坐标落点为 `22.692763,114.363572` |
| Android | 未安装百度地图 | 选择“百度地图” | 系统/宿主提示无法打开或停留在 H5返回后页面可继续操作不应白屏或卡死 |
| Android | 已安装高德地图 | 选择“高德地图” | 通过 `androidamap://` 打开高德地图,显示到深圳自然博物馆的驾车路线 |
| Android | 未安装高德地图 | 选择“高德地图” | 系统/宿主提示无法打开或停留在 H5返回后可改选百度地图 |
| iPhone | 已安装百度地图 | 选择“百度地图” | 通过 `baidumap://` 打开百度地图,目的地名称和 GCJ-02 落点正确 |
| iPhone | 未安装百度地图 | 选择“百度地图” | iOS/宿主提示无法打开或停留在 H5返回后页面状态正常 |
| iPhone | 已安装高德地图 | 选择“高德地图” | 通过 `iosamap://` 打开高德地图,显示到深圳自然博物馆的驾车路线 |
| iPhone | 未安装高德地图 | 选择“高德地图” | iOS/宿主提示无法打开或停留在 H5返回后可改选百度地图 |
每个平台还需补充验证:
1. 在 Action Sheet 上直接取消,页面无 toast、无跳转、可再次点击。
2. 从地图 App 返回宿主小程序后H5 页面没有重载异常,来馆面板仍可操作。
3. 宿主 web-view 安全策略允许对应自定义 Scheme若被宿主拦截应记录手机系统、宿主版本、微信版本和拦截表现。
4. 目的地名称显示为“深圳自然博物馆”,地图落点与现有 GCJ-02 坐标一致,没有发生二次坐标转换偏移。
未安装 App 时的具体系统提示由 Android/iOS、微信和宿主 web-view 决定。本次批准范围不包含 App 安装检测、应用商店回退或中转页,因此真机验收以“页面不白屏、不锁死、返回后可重试”为最低通过条件。
## 最终修改文件
- `src/services/MapNavigationService.ts`
- `tests/unit/MapNavigationService.spec.ts`
- `src/components/navigation/ArrivalPanel.vue`
- `tests/unit/ArrivalPanel.spec.ts`
- `doc/test-reports/h5-third-party-navigation-2026-07-13.md`