# H5 增强与内容扩展层方案 > 文档版本:v1.0 > 最后更新:2026-04-05 12:33:59 本文档用于明确当前项目中,如何通过 **H5 增强层** 承接高变化、高定制的内容与互动需求,同时保证主系统继续保持本地闭环、可降级、可独立管理。 核心结论: **H5 可以做增强体验,但应作为独立内容扩展层存在;主系统继续持有打点、状态机、结果兜底与核心游戏闭环。** --- ## 1. 目标 本文档重点解决以下问题: - 如何让 H5 承接详情页、互动任务页、品牌页、增强结果页 - 如何让 H5 与主系统解耦,而不是深度嵌入主流程 - 如何让 H5 页面能够独立开发、独立发布、独立回滚、独立管理 - 如何保证 H5 不可用时,比赛主流程仍然稳定可用 适用场景: - 打点后的详情说明页 - 打点后的互动任务页 - 拍照、录音、留言、作品提交等扩展页 - 品牌化结果页与活动包装页 不适用场景: - 地图主界面 - 打点判定 - 比赛开始 / 进行中 / 结束状态推进 - 高频实时 telemetry 主链路 --- ## 2. 设计原则 ### 2.1 主系统本地闭环 必须继续由小程序 / 原生层负责: - 地图与定位 - 打点判定 - 核心状态机 - 最小内容卡 - 最小结果页 - 本地缓存与断网兜底 ### 2.2 H5 只做增强,不做状态拥有者 H5 适合负责: - 富图文详情 - 互动任务 - 品牌包装 - 表单与作品提交 - 增强结果页 H5 不直接决定: - 是否打点成功 - 是否比赛结束 - 是否跳点成功 - 是否修改核心规则状态 ### 2.3 H5 必须独立存在 H5 页面不应作为“主系统页面的一部分代码”长期散落在业务仓里,而应逐步具备以下能力: - 独立页面目录与版本 - 独立静态资源发布 - 独立主题与资源管理 - 独立入口配置 - 独立回滚 ### 2.4 契约优先于页面实现 主系统与 H5 之间优先约定: - 页面入口模型 - Bridge 协议版本 - 页面能力白名单 - 结果回传结构 - fallback 行为 而不是先做大量页面,再反向补协议。 ### 2.5 所有增强能力都必须可降级 若 H5 打不开、Bridge 不可用、内容面 API 失败,系统应自动降级为: - 仍显示原生内容卡 - 仍可继续比赛 - 仍可查看原生结果页 - 不阻断地图主流程 --- ## 3. 推荐分层 建议当前项目的体验承载层按四层理解: ### 3.1 核心游戏层 负责: - 打点 - 地图 - GPS - HUD - 规则引擎 - 结果结算 这一层不依赖 H5 才能成立。 ### 3.2 原生兜底体验层 负责: - 最小内容卡 - 最小结果页 - 必要 CTA - H5 失败时的替代展示 ### 3.3 H5 内容扩展层 负责: - 详情页 - 互动任务页 - 品牌活动页 - 增强结果页 这一层通过原生 CTA 进入,不再承担局部弹窗职责。 ### 3.4 内容管理与发布层 负责: - H5 页面入口管理 - 页面版本管理 - Bridge 白名单管理 - 主题与资源管理 - fallback 策略 - 页面发布与回滚 这一层建议长期从玩法主配置中拆出来,形成独立内容体验管理能力。 --- ## 4. 推荐页面类型 建议第一阶段只正式支持以下几类 H5 页面: ### 4.1 内容详情页 用于: - 打点后的补充说明 - 景点 / 点位图文介绍 - 活动详情说明 特点: - 展示为主 - 交互较轻 - 可由原生内容卡 CTA 进入 ### 4.2 互动任务页 用于: - 拍照打卡 - 语音留言 - 问答互动 - 收集式任务 - 轻量小游戏互动 特点: - 需要 Bridge 能力 - 需要任务结果回传 - 需要原生 fallback ### 4.3 增强结果页 用于: - 品牌化成绩包装 - 徽章 / 分享 / 排名增强 - 作品提交后展示 特点: - 原生结果页始终保底 - H5 只做增强版入口 ### 4.4 活动包装页 用于: - 活动专题 - 客户品牌包装 - 招募 / 说明 / 规则展示 特点: - 可独立于局内主链存在 - 更接近内容页,而非玩法页 --- ## 5. 推荐运行链路 对于“打点后增强体验”,建议统一为: ```text 完成打点 -> 原生判定成功 -> 原生内容卡 / 原生短反馈 -> 用户点击 CTA -> 打开整页 H5 详情页 / 任务页 -> H5 获取上下文并完成互动 -> H5 submitResult 回传结果 -> 原生决定后续反馈 / 结果展示 ``` 对于“活动浏览链路”,建议统一为: ```text 活动列表 -> 活动详情页 -> 准备页 -> 地图主链 -> 原生结果页 -> 可选进入 H5 增强结果页 ``` 关键点: - H5 总是在主系统之后进入,而不是反向驱动主系统 - 打点成功必须先由原生确认 - 结果页必须始终有原生版本兜底 --- ## 6. 推荐配置挂接方式 当前项目建议继续沿用现有配置口径: - `playfield.controlOverrides..autoPopup` - `playfield.controlOverrides..contentExperience` - `playfield.controlOverrides..clickExperience` 推荐理解: - `autoPopup` 控制打点完成后是否先弹原生内容卡 - `contentExperience` 控制打点成功后的扩展体验入口 - `clickExperience` 控制点击点位时的补充内容入口 建议最小配置示例: ```json { "playfield": { "controlOverrides": { "control-3": { "autoPopup": true, "contentExperience": { "type": "h5", "url": "https://example.com/h5/tasks/control-3", "bridge": "content-v1", "presentation": "fullscreen" } } } } } ``` 建议继续坚持: - 不让 H5 直接顶替原生即时内容弹窗 - H5 默认按整页 / 全屏容器打开 - 配置只声明入口,不让页面内部细节反向污染玩法主配置 --- ## 7. 推荐 Bridge 最小契约 H5 与主系统之间建议继续保持最小协议: ### 7.1 原生注入上下文 最少应包含: - `eventId` - `sessionId` - `sessionStatus` - `controlId` - `bridgeVersion` - `mode` - `title` - `theme` ### 7.2 H5 可请求的最小能力 第一阶段建议只开放: - `getGameContext` - `close` - `takePhoto` - `recordAudio` - `submitResult` ### 7.3 H5 回传结果的最小结构 建议最少包含: - `taskId` - `status` - `payload` 示例: ```json { "id": "req-002", "channel": "request", "type": "submitResult", "payload": { "taskId": "task-photo-control-3", "status": "completed", "payload": { "assetId": "img-001" } } } ``` ### 7.4 协议边界 Bridge 只做: - 上下文读取 - 能力请求 - 结果回传 Bridge 不做: - 比赛核心状态修改 - 打点成功与否判定 - 比赛结束判定 - 地图主循环控制 --- ## 8. 推荐独立管理方式 若希望 H5 真正可扩展、可维护,建议长期形成独立内容体验管理能力。 ### 8.1 管理对象 建议至少管理以下对象: - 页面入口对象 - 页面版本对象 - 页面主题对象 - 页面资源对象 - Bridge 能力白名单 - fallback 策略 ### 8.2 与活动对象的关系 建议活动只绑定“已发布的体验对象摘要”,而不直接持有散装页面地址。 推荐关系: ```text Event -> EventRelease -> currentPresentation -> currentContentBundle -> runtime -> H5 页面入口摘要 / 任务入口摘要 ``` ### 8.3 与后台的分工 建议在后台中单列“内容体验中心”,负责: - 原生模板 - 原生 DSL - H5 页面入口 - Bridge 能力 - 主题配置 - 资源配置 - fallback 策略 而不是让玩法后台直接承接所有 H5 页面细节。 --- ## 9. 推荐发布与部署方式 H5 增强层建议按“独立静态发布物”管理。 ### 9.1 页面交付形态 建议: - H5 页面资源走静态发布物 - 上传 OSS / CDN - 由主系统根据已发布入口打开 ### 9.2 版本策略 建议每个 H5 页面具备: - 页面编码 `pageCode` - 页面版本 `version` - 协议版本 `bridgeVersion` - 状态 `draft / published / archived` ### 9.3 回滚策略 建议 H5 页面支持: - 单页回滚 - 活动级解绑 - fallback 到原生页 这样可以做到: - 内容改版不必改主系统发版 - 某个 H5 页出问题时可快速下线 - 玩法主链不受拖累 --- ## 10. 推荐 fallback 策略 建议从一开始就明确这几类降级行为: ### 10.1 H5 页面打不开 - 回退到原生内容卡 - 允许继续比赛 ### 10.2 Bridge 不可用 - 禁用扩展能力按钮 - 保留基础图文展示 ### 10.3 内容面 API 异常 - 允许 H5 本地完成基础展示 - 结果回传失败时提示稍后重试或改走原生兜底 ### 10.4 增强结果页不可用 - 保底显示原生结果页 - 不影响本局成绩结算与查看 --- ## 11. 对当前项目的建议落地顺序 建议按以下顺序推进,而不是一开始就大规模铺 H5 页: ### 第一阶段:定住边界 - 固定“原生内容卡 + H5 整页任务页”口径 - 固定 `content-v1` / `result-v1` - 固定 fallback 规则 ### 第二阶段:跑通最小闭环 - 先跑通一个内容详情页 - 再跑通一个互动任务页 - 再跑通一个增强结果页入口 ### 第三阶段:独立化管理 - 抽出 H5 页面入口管理 - 抽出 Bridge 白名单管理 - 抽出页面版本与发布记录 ### 第四阶段:产品化扩展 - 再接拍照任务 - 再接留言任务 - 再接作品提交 - 再接品牌专题与增强结果页 --- ## 12. 当前阶段不建议做的事 - 不建议继续尝试局部 H5 弹窗 - 不建议让 H5 直接参与打点判定 - 不建议让 H5 持有比赛主状态 - 不建议把 H5 页面地址直接散落在多个业务字段里长期维护 - 不建议把页面内部所有细节都硬塞进玩法主配置 - 不建议在没有 fallback 的前提下把结果页完全交给 H5 --- ## 13. 与现有文档的关系 本方案是对以下文档的补充收口: - `混合体验架构方案` - `原生与 H5 Bridge 规范` - `主流程与增强能力边界说明` - `API 与发布物边界约定` - `后台管理系统建设建议` 定位上: - `混合体验架构方案` 负责总体分层 - `Bridge 规范` 负责通信契约 - 本文负责回答“H5 如何作为独立增强层长期存在并管理” --- ## 14. 一句话结论 最适合当前项目的 H5 方案,不是把 H5 做成主系统的一部分,而是: **主系统持有核心闭环,H5 作为独立内容扩展层存在,通过稳定入口、稳定 Bridge、独立发布和明确 fallback 承接高变化体验。**