Flutter应用升级插件hgg_app_upgrade的使用
Flutter应用升级插件hgg_app_upgrade的使用
添加依赖
-
在
pubspec.yaml
中加入:dependencies: hgg_app_upgrade: ^1.1.0
-
执行flutter命令获取包:
flutter pub get
-
引入:
import 'package:hgg_app_upgrade/hgg_app_upgrade.dart';
-
如果你需要支持Android平台,在
./android/app/src/main/AndroidManifest.xml
文件中配置provider
,代码如下:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.flutter.laomeng.flutter_upgrade_example"> <application android:name="io.flutter.app.FlutterApplication" android:icon="@mipmap/ic_launcher" android:label="flutter_upgrade_example"> ... <provider android:name="androidx.core.content.FileProvider" android:authorities="com.hgg.hgg_app_upgrade_example.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" tools:replace="android:resource" android:resource="@xml/file_paths" /> </provider> </application> </manifest>
注意:provider中authorities的值为当前App的包名,和顶部的package值保持一致。
App升级功能使用介绍
只需在主页的initState
方法中调用升级检测方法:
@override
void initState() {
AppUpgrade.appUpgrade(
context,
_checkAppInfo(),
iosAppId: 'id88888888',
);
super.initState();
}
_checkAppInfo
方法访问后台接口获取是否有新的版本的信息,返回Future<AppUpgradeInfo>
类型,AppUpgradeInfo
包含title、升级内容、apk下载url、是否强制升级等版本信息。如果没有新的版本不返回即可。
Future<AppUpgradeInfo> _checkAppInfo() async {
// 这里一般访问网络接口,将返回的数据解析成如下格式
return Future.delayed(Duration(seconds: 1), () {
return AppUpgradeInfo(
title: '新版本V1.1.1',
contents: [
'1、支持立体声蓝牙耳机,同时改善配对性能',
'2、提供屏幕虚拟键盘',
'3、更简洁更流畅,使用起来更快',
'4、修复一些软件在使用时自动退出bug',
'5、新增加了分类查看功能'
],
force: false,
);
});
}
iosAppId
参数用于跳转到app store。
访问后台接口获取新版本的信息一般需要当前App的包名和版本,查询方法如下:
await HggUpgrade.appInfo
返回的类型是AppInfo
:
versionName
:版本号,比如1.0.0。versionCode
:Android独有版本号,对应Android build.gradle中的versionCode,ios返回“0”。packageName
:包名,对应Android build.gradle中的applicationId,ios的BundleIdentifier。
iOS平台升级
iOS平台直接跳转到app store相关页面,iosAppId
一定要设置对,否则app store会找不到应用程序。
Android平台下载apk
Android平台则会判断是否设置了apk下载url,如果设置了则下载apk则直接下载,效果如下:
当下载完成时直接跳转到apk安装引导界面,效果如下:
用户点击允许,出现如下界面:
点击继续安装即可,上面的安装引导界面是系统界面,不同的手机或者不同的Android版本会略有不同。
Android平台跳转应用市场
如果不提供apk下载地址,点击“立即体验”,则会跳转到应用市场,不指定应用市场则会弹出提示框,让用户选择应用市场,效果如下:
提示框内将会包含手机内安装的所有的应用市场,用户选择一个然后跳转到对应应用市场的详情界面,如果当前应用未在此市场上架则会出现“找不到的界面”。
通常情况下会指定应用市场,这就需要知道用户手机内安装的应用市场,查询方法如下:
_getInstallMarket() async {
List<String> marketList = await HggUpgrade.getInstallMarket();
}
插件内置了国内常用的应用市场,包括小米、魅族、vivo、oppo、华为、zte、360助手、应用宝、pp助手、豌豆荚,如果你需要检测其他的应用市场,比如google play,只需添加google play的包名即可:
_getInstallMarket() async {
List<String> marketList = await HggUpgrade.getInstallMarket(marketPackageNames: ['com.google.android.apps.maps']);
}
方法返回手机安装的应用市场,根据安装的应用市场指定跳转应用市场,如果你要指定内置的应用市场,可以根据包名获取内置的应用市场的相关信息:
AppMarketInfo _marketInfo = AppMarket.getBuildInMarket(packageName);
指定华为应用市场:
AppUpgrade.appUpgrade(
context,
_checkAppInfo(),
iosAppId: 'id88888888',
appMarketInfo: AppMarket.huawei
);
指定没有内置的应用市场方法如下:
AppUpgrade.appUpgrade(
context,
_checkAppInfo(),
iosAppId: 'id88888888',
appMarketInfo: AppMarketInfo(
'应用市场名称(选填)', '应用市场包名', '应用市场类名'
),
);
用户行为和下载回调
新的版本(1.1.0)新增了取消 和立即更新回调,用法如下:
AppUpgrade.appUpgrade(
context,
_checkAppInfo(),
cancelText: '以后再说',
okText: '马上升级',
iosAppId: 'id88888888',
appMarketInfo: AppMarket.huawei,
onCancel: () {
print('onCancel');
},
onOk: () {
print('onOk');
},
);
新增的下载进度和下载状态变化回调,用法如下:
AppUpgrade.appUpgrade(
context,
_checkAppInfo(),
cancelText: '以后再说',
okText: '马上升级',
iosAppId: 'id88888888',
appMarketInfo: AppMarket.huawei,
downloadProgress: (count, total) {
print('count:$count,total:$total');
},
downloadStatusChange: (DownloadStatus status, {dynamic error}) {
print('status:$status,error:$error');
},
);
提示框样式定制
如果默认的升级提示框不满足你的需求,那么你可以定制你的升级提示框。
AppUpgrade.appUpgrade(context, _checkAppInfo(),
titleStyle: TextStyle(fontSize: 30),
contentStyle: TextStyle(fontSize: 18),
...
)
通过titleStyle
和contentStyle
设置其样式,可以设置字体大小、颜色、粗体等。
AppUpgrade.appUpgrade(context, _checkAppInfo(),
cancelText: '以后再说',
cancelTextStyle: TextStyle(color: Colors.grey),
okText: '马上升级',
okTextStyle: TextStyle(color: Colors.red),
...
)
默认“取消”按钮文本是"以后再说",默认“升级”按钮的文本是“立即体验”。
AppUpgrade.appUpgrade(context, _checkAppInfo(),
okBackgroundColors: [Colors.blue, Colors.lightBlue],
...
)
设置“升级”按钮的背景颜色,需要2种颜色,2种颜色左到右线性渐变,如果想设置纯色,只需将2种颜色设置为同一个颜色即可,默认颜色是系统的primaryColor
:
AppUpgrade.appUpgrade(context, _checkAppInfo(),
progressBarColor: Colors.lightBlue.withOpacity(.4),
...
)
设置进度条的颜色:
AppUpgrade.appUpgrade(context, _checkAppInfo(),
progressBarColor: Colors.lightBlue.withOpacity(.4),
...
)
设置升级提示框的圆角半径,默认是20:
AppUpgrade.appUpgrade(context, _checkAppInfo(),
borderRadius: 15,
...
)
更多关于Flutter应用升级插件hgg_app_upgrade的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter应用升级插件hgg_app_upgrade的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中使用hgg_app_upgrade
插件的示例代码。这个插件通常用于在应用内提示用户进行版本更新。
首先,确保在你的pubspec.yaml
文件中添加对hgg_app_upgrade
的依赖:
dependencies:
flutter:
sdk: flutter
hgg_app_upgrade: ^最新版本号 # 替换为实际的最新版本号
然后,运行flutter pub get
来安装插件。
接下来,在你的Flutter应用中,你可以按照以下步骤使用hgg_app_upgrade
插件:
- 导入插件:
import 'package:hgg_app_upgrade/hgg_app_upgrade.dart';
- 配置和使用插件:
下面是一个完整的示例,展示了如何检查版本更新并提示用户:
import 'package:flutter/material.dart';
import 'package:hgg_app_upgrade/hgg_app_upgrade.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
_checkForUpdates();
}
Future<void> _checkForUpdates() async {
// 模拟从服务器获取的最新版本信息
final updateInfo = UpgradeInfo(
versionCode: 2, // 新版本代码
versionName: "2.0.0", // 新版本名称
upgradeContent: "本次更新修复了一些bug并优化了性能", // 更新内容
apkUrl: "https://example.com/path/to/your/app-release.apk", // APK下载地址
isForcibly: false, // 是否强制更新
);
// 使用插件检查版本更新
HggAppUpgrade().checkUpgrade(updateInfo: updateInfo).then((result) {
if (result == UpgradeResult.hasUpdate) {
// 有更新,显示更新对话框
HggAppUpgrade().showUpgradeDialog(
context: context,
upgradeInfo: updateInfo,
onIgnore: () {
// 用户选择忽略更新
print("用户选择忽略更新");
},
onDownload: () {
// 用户选择下载更新
print("用户选择下载更新");
},
);
} else if (result == UpgradeResult.noUpdate) {
// 没有更新
print("当前已是最新版本");
} else if (result == UpgradeResult.forciblyUpgrade) {
// 强制更新
HggAppUpgrade().showForciblyUpgradeDialog(
context: context,
upgradeInfo: updateInfo,
onDownload: () {
// 用户选择下载更新(强制更新场景)
print("用户选择下载强制更新");
},
);
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Demo'),
),
body: Center(
child: Text('检查应用更新示例'),
),
);
}
}
// 模拟的升级信息类
class UpgradeInfo {
final int versionCode;
final String versionName;
final String upgradeContent;
final String apkUrl;
final bool isForcibly;
UpgradeInfo({
required this.versionCode,
required this.versionName,
required this.upgradeContent,
required this.apkUrl,
required this.isForcibly,
});
}
在上面的代码中,我们定义了一个UpgradeInfo
类来模拟从服务器获取的更新信息。然后,在_checkForUpdates
方法中,我们使用HggAppUpgrade().checkUpgrade
方法来检查版本更新,并根据结果显示相应的对话框。
请注意,在实际应用中,你可能需要从服务器动态获取更新信息,而不是像示例中那样硬编码。此外,处理APK下载和安装可能需要额外的权限和配置,具体取决于你的应用和目标平台。