概述
本系统为UniApp项目提供完整的APK更新解决方案,包括版本检查、下载、安装等功能。
功能特性
- ✅ 自动版本检查
- ✅ 手动检查更新
- ✅ 智能更新提示
- ✅ 下载进度显示
- ✅ 自动安装APK
- ✅ 强制更新支持
- ✅ 更新设置管理
- ✅ 更新日志记录
系统架构
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前端应用 │ │ 更新管理器 │ │ 后端服务 │
│ │ │ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │ 更新设置页 │ │◄──►│ │ 版本检查 │ │◄──►│ │ 版本检查API │ │
│ └─────────────┘ │ │ └─────────────┘ │ │ └─────────────┘ │
│ │ │ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │ 更新对话框 │ │◄──►│ │ 下载管理 │ │◄──►│ │ 下载信息API │ │
│ └─────────────┘ │ │ └─────────────┘ │ │ └─────────────┘ │
│ │ │ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │ │ │
│ │ 进度显示 │ │◄──►│ │ 安装管理 │ │ │ │
│ └─────────────┘ │ │ └─────────────┘ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
安装配置
1. 后端API接口
需要在后端实现以下两个接口:
版本检查接口 (SDR083309)
请求参数:
{
"currentVersion": "1.0.5",
"currentVersionCode": 6,
"platform": "android",
"appId": "__UNI__063160B"
}
响应数据:
{
"code": 200,
"message": "success",
"data": {
"hasUpdate": true,
"versionName": "1.0.6",
"versionCode": 7,
"forceUpdate": false,
"updateLog": "1. 修复已知问题\n2. 优化用户体验\n3. 新增功能",
"fileSize": 15728640,
"downloadUrl": "https://example.com/app-v1.0.6.apk",
"releaseDate": "2024-01-15"
}
}
下载信息接口 (SDR083310)
请求参数:
{
"version": "1.0.6",
"platform": "android"
}
响应数据:
{
"code": 200,
"message": "success",
"data": {
"downloadUrl": "https://example.com/app-v1.0.6.apk",
"fileSize": 15728640,
"md5": "abc123def456",
"expireTime": "2024-01-20T10:00:00Z"
}
}
2. 前端配置
在App.vue中初始化
import updateManager from './utils/updateManager.js'
export default {
onLaunch() {
// 初始化更新管理器
setTimeout(() => {
updateManager.init()
}, 1000)
}
}
在pages.json中添加页面
{
"path": "pages/updatesettings/updatesettings",
"style": {
"navigationBarTitleText": "更新设置",
"navigationBarBackgroundColor": "#007AFF",
"navigationBarTextStyle": "white"
}
}
使用方法
1. 自动更新
系统会在以下时机自动检查更新:
- 应用启动时(延迟1秒)
- 应用进入前台时
- 根据配置的检查间隔
2. 手动检查更新
import updateManager from '@/utils/updateManager.js'
// 手动检查更新
updateManager.manualCheckUpdate()
3. 跳转到更新设置页面
uni.navigateTo({
url: '/pages/updatesettings/updatesettings'
})
4. 配置更新参数
import updateManager from '@/utils/updateManager.js'
// 设置更新配置
updateManager.setUpdateConfig({
showUpdateDialog: true, // 显示更新对话框
autoDownload: false, // 自动下载
checkInterval: 24 * 60 * 60 * 1000 // 检查间隔
})
更新流程
1. 版本检查流程
graph TD
A[应用启动] --> B[延迟1秒]
B --> C[检查上次检查时间]
C --> D{是否超过检查间隔?}
D -->|是| E[调用版本检查API]
D -->|否| F[跳过检查]
E --> G{是否有更新?}
G -->|是| H[显示更新对话框]
G -->|否| I[记录检查时间]
H --> J[用户选择]
J -->|立即更新| K[开始下载]
J -->|稍后更新| L[关闭对话框]
2. 下载安装流程
graph TD
A[开始下载] --> B[获取下载信息]
B --> C[创建下载任务]
C --> D[显示下载进度]
D --> E{下载完成?}
E -->|是| F[验证文件]
E -->|否| G[继续下载]
F --> H[安装APK]
H --> I[重启应用]
G --> D
配置说明
更新配置参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| showUpdateDialog | Boolean | true | 是否显示更新对话框 |
| autoDownload | Boolean | false | 是否自动下载 |
| checkInterval | Number | 86400000 | 检查间隔(毫秒) |
| forceUpdate | Boolean | false | 是否强制更新 |
检查间隔选项
- 每次启动:0
- 每天:86400000 (24小时)
- 每周:604800000 (7天)
- 每月:2592000000 (30天)
注意事项
1. 权限要求
确保应用具有以下权限:
- 网络访问权限
- 存储读写权限
- 安装APK权限
2. 证书配置
确保APK使用相同的签名证书,否则无法覆盖安装。
3. 版本号管理
versionName:用户可见的版本号(如:1.0.5)versionCode:内部版本号,必须递增(如:6)
4. 网络环境
- 建议在WiFi环境下下载大文件
- 支持断点续传(如果服务器支持)
5. 错误处理
系统会自动处理以下错误:
- 网络连接失败
- 下载失败
- 安装失败
- 版本检查失败
故障排除
1. 更新检查失败
可能原因:
- 网络连接问题
- 服务器接口异常
- 请求参数错误
解决方法:
- 检查网络连接
- 查看控制台错误日志
- 验证API接口参数
2. 下载失败
可能原因:
- 网络不稳定
- 存储空间不足
- 下载链接失效
解决方法:
- 检查网络状态
- 清理存储空间
- 重新获取下载链接
3. 安装失败
可能原因:
- 签名不匹配
- 权限不足
- 文件损坏
解决方法:
- 使用相同证书签名
- 检查安装权限
- 重新下载APK
扩展功能
1. 增量更新
可以实现增量更新功能,只下载变更的文件。
2. 热更新
对于非原生功能,可以使用热更新技术。
3. 灰度发布
支持按用户群体分批推送更新。
4. 回滚机制
支持版本回滚功能。