uniapp APK更新系统使用指南

61 阅读3分钟

概述

本系统为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

配置说明

更新配置参数

参数类型默认值说明
showUpdateDialogBooleantrue是否显示更新对话框
autoDownloadBooleanfalse是否自动下载
checkIntervalNumber86400000检查间隔(毫秒)
forceUpdateBooleanfalse是否强制更新

检查间隔选项

  • 每次启动: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. 回滚机制

支持版本回滚功能。

如果有小伙伴感兴趣,欢迎私聊