App版本更新功能 产品需求文档 (PRD)
1. 需求背景
1.1 需求说明
随着移动应用迭代加速,传统的应用商店更新机制存在以下问题:
1. 更新延迟:App Store审核周期长,新版本上线滞后
2. 用户流失:强制跳转应用商店导致用户流失率高
3. 版本管理难:无法精准控制特定版本用户的强制更新
4. 数据缺失:缺乏更新成功率、用户行为等关键数据
为解决上述问题,需构建一套跨平台、可配置的App版本更新系统,支持Android直接下载和iOS商店跳转,提供完整的更新管理能力。
1.2 需求目标
|---------|-------|---------|
| Android更新转化率 | 提升至75% | 上线后30天 |
| iOS更新转化率 | 提升至65% | 上线后30天 |
| 强制更新执行率 | 达到95% | 上线后30天 |
| 更新成功率 | 达到98% | 上线后30天 |
| 用户投诉率 | 降低50% | 上线后30天 |
1.3 目标用户
|---------|---------|---------|
| 普通用户 | 各年龄段移动应用用户 | 更新过程简单快捷,不中断使用 |
| 运维人员 | 技术运维团队 | 灵活控制更新策略,快速响应问题 |
| 产品经理 | 产品管理团队 | 获取更新数据,优化版本发布策略 |
1.4 核心价值主张
"一套智能、可控的跨平台App更新解决方案,大幅提升版本覆盖效率,降低用户流失风险"
2. 产品架构
2.1 功能架构图
mindmap
root((App版本更新系统))
用户端功能
版本检查模块
启动检查
定时检查
手动检查
更新提示模块
弹窗设计
版本信息展示
更新类型标识
Android更新模块
APK下载
进度条展示
断点续传
自动安装
iOS更新模块
App Store跳转
深度链接支持
更新状态检测
管理端功能
版本配置模块
版本信息管理
强制更新配置
灰度发布控制
数据分析模块
更新成功率统计
用户行为分析
版本对比报表
技术支撑
接口服务
版本检查接口
下载地址接口
配置管理接口
安全机制
签名校验
防篡改保护
访问控制
2.2 用户角色定义
|---------|---------|---------|
| 终端用户 | App使用者 | 查看更新信息,选择是否更新 |
| 普通运营 | 日常运营人员 | 查看更新数据,配置非强制更新 |
| 高级管理员 | 技术管理员 | 配置强制更新,管理版本黑白名单 |
| 超级管理员 | 系统管理员 | 所有配置权限,系统参数设置 |
3. 核心业务流程
flowchart TD
A[App启动] --> B{版本检查}
| B --> | 有新版本 | C{判断平台} |
| B --> | 无新版本 | D[正常进入App] |
| C --> | Android | E{判断更新类型} |
| C --> | iOS | F[展示iOS更新提示] |
| E --> | 强制更新 | G[展示强制更新界面] |
| E --> | 可选更新 | H[展示可选更新界面] |
G --> I[开始下载APK]
H --> J{用户选择}
| J --> | 立即更新 | I |
| J --> | 稍后提醒 | K[设置提醒时间] |
I --> L[显示下载进度]
L --> M{下载完成}
| M --> | 成功 | N[自动安装] |
| M --> | 失败 | O[展示错误提示] |
N --> P[重启应用]
F --> Q{用户选择}
| Q --> | 前往更新 | R[跳转App Store] |
| Q --> | 稍后提醒 | S[设置iOS提醒] |
R --> T[用户在App Store更新]
K --> D
S --> D
O --> D
4. 详细功能说明
4.1 版本检查模块
#### 4.1.1 启动检查功能
|-----|------|
| 功能描述 | App启动时自动检查服务器最新版本信息,判断是否需要更新 |
| 前置条件 | 1. 网络连接正常<br>2. 用户设备已安装当前版本App |
接口参数:
|-----|------|-----|---------|
| app_id | 字符串 | 应用唯一标识 | 必填,长度≤32 |
| version_code | 整数 | 当前版本号 | 必填,正整数 |
| platform | 字符串 | 平台类型(android/ios) | 必填 |
| channel | 字符串 | 渠道标识 | 可选 |
交互逻辑:
1. App启动完成,主线程初始化后调用版本检查接口
2. 接口返回最新版本信息及更新配置
3. 本地对比版本号,判断是否需要更新
4. 如需更新,根据配置类型展示相应提示
异常处理:
|---------|---------|
| 网络连接失败 | 静默失败,不影响App正常启动 |
| 接口超时(>3s) | 放弃检查,下次启动重试 |
| 接口返回格式错误 | 记录日志,使用本地缓存配置 |
| 本地版本号异常 | 使用默认配置,不强制更新 |
4.2 Android更新模块
#### 4.2.1 APK下载功能
|-----|------|
| 功能描述 | 从CDN服务器下载APK安装包,支持断点续传和进度显示 |
| 前置条件 | 1. Android 6.0+<br>2. 存储权限已授权<br>3. 安装未知应用权限已开启 |
页面元素:
|-----|------|-----|---------|
| 进度条 | 水平进度条 | 显示下载百分比 | 下载中 |
| 进度文本 | 文本标签 | "下载中: 65% (12.3MB/18.9MB)" | 下载中 |
| 下载速度 | 文本标签 | "速度: 1.2MB/s" | 下载中 |
| 剩余时间 | 文本标签 | "剩余: 15秒" | 下载中 |
| 暂停按钮 | 按钮 | 暂停下载 | 下载中 |
| 继续按钮 | 按钮 | 继续下载 | 已暂停 |
| 取消按钮 | 按钮 | 取消下载 | 任何时候 |
| 安装按钮 | 按钮 | 开始安装 | 下载完成 |
交互逻辑:
1. 用户点击"立即更新"后开始下载
2. 系统显示全屏遮罩,居中展示下载进度界面
3. 实时更新进度条和文本信息
4. 支持暂停/继续/取消操作
5. 下载完成后自动弹出安装确认框
6. 用户确认后调用系统安装器
异常处理:
|---------|---------|
| 存储空间不足 | 提示"存储空间不足,请清理后重试" |
| 网络连接中断 | 自动暂停,网络恢复后提示继续 |
| CDN服务器错误 | 切换备用下载地址重试 |
| 签名校验失败 | 提示"安装包校验失败,请重新下载" |
| 安装过程被取消 | 保留已下载文件,下次可继续安装 |
4.3 iOS更新模块
#### 4.3.1 App Store跳转功能
|-----|------|
| 功能描述 | 通过深度链接跳转到App Store应用页面 |
| 前置条件 | 1. iOS 10.0+<br>2. 设备已安装App Store |
页面元素:
|-----|------|-----|---------|
| 更新提示框 | 模态弹窗 | 展示新版本信息 | 需要更新时 |
| 版本号 | 文本标签 | "v2.5.0" | 更新提示框内 |
| 更新日志 | 文本区域 | 新功能列表 | 更新提示框内 |
| 立即更新按钮 | 按钮 | 跳转到App Store | 可选更新时 |
| 强制更新按钮 | 按钮 | 跳转到App Store | 强制更新时 |
| 稍后提醒按钮 | 按钮 | 关闭提示 | 可选更新时 |
交互逻辑:
1. 检测到iOS平台需要更新时展示提示框
2. 用户点击"立即更新"按钮
3. 调用 itms-apps://itunes.apple.com/app/id[APP_ID] 打开App Store
4. 记录跳转时间,用于统计转化率
5. 可选:定期检查App版本是否已更新
异常处理:
|---------|---------|
| App Store未安装 | 提示"无法打开App Store" |
| 深度链接无效 | 使用Web链接打开Safari |
| 用户取消跳转 | 记录为"用户取消"事件 |
| 长时间未更新 | 下次启动时再次提示 |
4.4 配置管理模块
#### 4.4.1 强制更新配置功能
|-----|------|
| 功能描述 | 后端可配置是否强制用户更新,支持版本范围控制 |
| 前置条件 | 管理员权限登录配置后台 |
配置参数:
|-----|------|-----|-------|
| force_update | 布尔值 | 是否强制更新 | false |
| min_version | 字符串 | 最低支持版本 | "" |
| max_version | 字符串 | 最高支持版本 | "" |
| excluded_versions | 数组 | 排除版本列表 | [] |
| start_time | 时间戳 | 生效开始时间 | 立即 |
| end_time | 时间戳 | 生效结束时间 | 永久 |
| platforms | 数组 | 适用平台 | ["android","ios"] |
| channels | 数组 | 适用渠道 | ["all"] |
交互逻辑:
1. 管理员登录配置后台
2. 选择"版本管理"→"强制更新配置"
3. 填写配置表单并保存
4. 配置实时生效,客户端下次检查时应用新规则
5. 数据需求
5.1 分析思路
|---------|---------|---------|
| 更新转化率 | 展示用户数 / 点击更新用户数 | 客户端埋点 |
| 更新成功率 | 成功安装用户数 / 开始下载用户数 | 客户端埋点 |
| 强制更新执行率 | 强制更新场景下完成更新的用户比例 | 客户端埋点+后端日志 |
| 用户流失分析 | 未更新用户后续活跃度变化 | 用户行为日志 |
| 版本覆盖率 | 各版本用户分布随时间变化 | 版本检查接口日志 |
5.2 数据采集
#### 5.2.1 现有埋点复用
|---------|---------|--------------|-------|
| 页面浏览统计 | PageView | zz_page_name, $app_version | 是(需新增页面) |
| 按钮点击统计 | ElementClick | zz_element_id, zz_page_name | 是(需新增元素ID) |
| 应用启动统计 | AppLaunch | $app_version, $os | 否 |
#### 5.2.2 新增埋点
|---------|---------|---------|------|
| UpdateCheck | 版本检查完成 | zz_update_type, zz_new_version, zz_force_update | 版本检查结果 |
| UpdateDialogShow | 更新弹窗展示 | zz_dialog_type, zz_version_info | 弹窗曝光 |
| UpdateButtonClick | 更新按钮点击 | zz_button_action, zz_platform | 用户操作 |
| DownloadStart | 下载开始 | zz_file_size, zz_download_url | 下载开始 |
| DownloadProgress | 下载进度更新 | zz_progress, zz_speed, zz_remaining | 进度跟踪 |
| DownloadComplete | 下载完成 | zz_total_time, zz_success | 下载完成 |
| InstallStart | 安装开始 | zz_install_type | 安装开始 |
| InstallResult | 安装结果 | zz_success, zz_error_code | 安装结果 |
| StoreRedirect | App Store跳转 | zz_redirect_result | 跳转结果 |
新增埋点参数格式:
|-------|------|------|
| zz_update_type | STRING | 更新类型(force/optional/none) |
| zz_new_version | STRING | 新版本号 |
| zz_force_update | BOOL | 是否强制更新 |
| zz_dialog_type | STRING | 弹窗类型(android/ios) |
| zz_version_info | STRING | 版本信息JSON |
| zz_button_action | STRING | 按钮动作(update/later/cancel) |
| zz_platform | STRING | 平台(android/ios) |
| zz_file_size | NUMBER | 文件大小(字节) |
| zz_download_url | STRING | 下载地址 |
| zz_progress | NUMBER | 进度百分比(0-100) |
| zz_speed | NUMBER | 下载速度(字节/秒) |
| zz_remaining | NUMBER | 剩余时间(秒) |
| zz_total_time | NUMBER | 总耗时(毫秒) |
| zz_success | BOOL | 是否成功 |
| zz_install_type | STRING | 安装类型(auto/manual) |
| zz_error_code | STRING | 错误代码 |
| zz_redirect_result | STRING | 跳转结果(success/failed/canceled) |
---
6. 技术规格
6.1 Android技术实现
1. 下载引擎:使用OkHttp实现支持断点续传的下载
2. 进度通知:通过BroadcastReceiver实时更新UI进度
3. 安装调用:使用FileProvider处理Android 7.0+文件共享
4. 签名校验:APK下载后验证SHA256签名
5. 权限处理:动态申请存储和安装未知应用权限
6.2 iOS技术实现
1. 版本检测:通过CFBundleVersion与服务器版本对比
2. 商店跳转:使用SKStoreProductViewController或UIApplication.open
3. 状态监听:通过KVO监听App状态变化
4. 本地缓存:UserDefaults存储用户选择记录
6.3 接口设计
1. 版本检查接口:GET /api/v1/version/check
2. 配置获取接口:GET /api/v1/config/update
3. 数据上报接口:POST /api/v1/event/report
4. CDN下载接口:提供多地域、多供应商的下载地址
6.4 安全考虑
1. 防劫持:HTTPS通信,证书固定
2. 防篡改:接口签名校验,APK完整性验证
3. 防刷:频率限制,设备指纹识别
4. 隐私保护:匿名化用户标识,合规数据收集
---
文档版本:v1.0
最后更新:2026-03-10
文档状态:评审中