Flutter应用程序版本更新与自动升级配置方法

1. 应用程序升级流程

由于在 IOS 中没法直接下载安装,如果版本不一致则直接跳转到IOS应用对应的应用市场就可以了,所以本文仅介绍Android App的升级流程。

Android App升级流程:

1. 获取本地版本号;

2. 请求服务器获取服务器版本号;

3. 如果本地版本和服务器版本不一致则提示升级,弹窗提示用户是否更新;

4. 用户确定升级,调用文件传输方法下载apk文件;

5. 监听下载进度;

6. 下载完成打开apk进行安装。

 

2.  Android 升级 App 涉及的 API 库

Flutter应用程序版本更新与自动升级配置方法_第1张图片

 

3. 获取版本信息

https://pub.flutter-io.cn/packages/package_info

1. 安装插件

dependencies:
  package_info: ^0.4.3+4

在pubspec.yaml中配置保存后,在VS Code环境中会自动下载依赖包。

如果无法正常下载,执行 flutter pub get 

2. 引入并使用

// 引入获取版本信息包
import 'package:package_info/package_info.dart';

PackageInfo packageInfo = await PackageInfo.fromPlatform();
String appName = packageInfo.appName;
String packageName = packageInfo.packageName;
String version = packageInfo.version;
String buildNumber = packageInfo.buildNumber;

// 应用名称
print("appName:${appName}");
// 包名称
print("packageName:${packageName}");
// 版本号
print("version:${version}");
// 构建编号
print("buildNumber:${buildNumber}");

 

4. 获取文件存储路径

https://pub.flutter-io.cn/packages/path_provider

1. 安装插件

dependencies:
  path_provider: ^1.6.27

在pubspec.yaml中配置保存后,在VS Code环境中会自动下载依赖包。

如果无法正常下载,执行 flutter pub get 

2. 引入并使用

// 引入获取文件存储路径的包
import 'package:path_provider/path_provider.dart';

Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;

Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;

var directory = await getExternalStorageDirectory();

String storageDirectory = directory.path;
// 获取临时目录
print("tempPath:${tempPath}");
// 获取应用的安装目录
print("appDocDir:${appDocPath}");
// 获取存储卡的路径
print("StorageDirectory:${storageDirectory}");

 

5. 文件下载

https://pub.flutter-io.cn/packages/flutter_downloader

1. 安装插件

dependencies:
  flutter_downloader: ^1.5.2

在pubspec.yaml中配置保存后,在VS Code环境中会自动下载依赖包。

如果无法正常下载,执行 flutter pub get 

2. 配置权限

Flutter应用程序版本更新与自动升级配置方法_第2张图片

代码如下:





其它配置:

Flutter应用程序版本更新与自动升级配置方法_第3张图片

代码如下:



    




    
    

3. 引入并使用

// 引入获取文件路径的包(提前安装)
import 'package:path_provider/path_provider.dart';
// 引入文件下载的包
import 'package:flutter_downloader/flutter_downloader.dart';

// 获取存储卡的路径
final directory = await getExternalStorageDirectory();
String _localPath = directory.path;


await FlutterDownloader.enqueue(
    // 远程的APK地址(注意:安卓9.0以上后要求用https)
    url: "http://www.ionic.wang/shop.apk",
    // 下载保存的路径
    savedDir: _localPath,
    // 是否在手机顶部显示下载进度(仅限安卓)
    showNotification:true,   
    // 是否允许下载完成点击打开文件(仅限安卓)      
    openFileFromNotification:true, 
);

FlutterDownloader.registerCallback((id, status, progress){
    print(status);
    print(progress);
});

 

6.  打开文件

https://pub.flutter-io.cn/packages/open_file

1. 安装插件

dependencies:
  open_file: ^3.0.3

在pubspec.yaml中配置保存后,在VS Code环境中会自动下载依赖包。

如果无法正常下载,执行 flutter pub get 

2. 引入并使用

// 引入打开文件的包
import 'package:open_file/open_file.dart';
// 引入获取文件路径的包(提前安装)
import 'package:path_provider/path_provider.dart';

// 获取存储卡的路径
final directory = await getExternalStorageDirectory();
String _localPath = directory.path;

// 打开文件,apk的名称需要与下载时对应
OpenFile.open("${_localPath}/shop.apk");

 

7. 替换版本

安装包下载安装后,默认会生成一个新的版本,并不会覆盖原有的应用程序,为此,需要提前做一些版本号的配置。



    
    ......



上面的代码在打包时,注意事项如下:

1. package的值不能变,即包名不能变;

2. android:versionCode的值要增加;

3. android:versionName的值要增加。

另外,上面代码中配置的版本号在 package_info 这个插件中是无法获取的,所以还需要在pubspec.yaml配置同样的版本信息,这样才能获取版本信息进行对比。

# pubspec.yaml
version: 0.0.2+2

上面的代码中0.0.2对应的是android:versionName的值,+2对应的是android:versionCode的值。

完成上面这些步骤,就可以开始开始正式打包了。

你可能感兴趣的:(Flutter)