由于在 IOS 中没法直接下载安装,如果版本不一致则直接跳转到IOS应用对应的应用市场就可以了,所以本文仅介绍Android App的升级流程。
Android App升级流程:
1. 获取本地版本号;
2. 请求服务器获取服务器版本号;
3. 如果本地版本和服务器版本不一致则提示升级,弹窗提示用户是否更新;
4. 用户确定升级,调用文件传输方法下载apk文件;
5. 监听下载进度;
6. 下载完成打开apk进行安装。
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}");
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}");
https://pub.flutter-io.cn/packages/flutter_downloader
1. 安装插件
dependencies:
flutter_downloader: ^1.5.2
在pubspec.yaml中配置保存后,在VS Code环境中会自动下载依赖包。
如果无法正常下载,执行 flutter pub get 。
2. 配置权限
代码如下:
其它配置:
代码如下:
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);
});
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");
安装包下载安装后,默认会生成一个新的版本,并不会覆盖原有的应用程序,为此,需要提前做一些版本号的配置。
......
上面的代码在打包时,注意事项如下:
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的值。
完成上面这些步骤,就可以开始开始正式打包了。