Flutter应用升级管理插件r_upgrade的使用
Flutter应用升级管理插件r_upgrade的使用
插件概述
r_upgrade
是一个用于Flutter应用在Android和iOS平台上进行版本更新的插件。它支持多种更新方式,如通过链接跳转更新、从应用商店更新、下载APK文件更新等,并且提供了详细的API来控制更新过程中的各个环节。
主要功能
-
Android平台
- [✔] 支持通过链接模式更新
- [✔] 获取用户已安装的应用商店列表(仅限部分商店)
- [✔] 从指定的应用商店获取应用版本信息(目前仅支持Google Play、小米、腾讯)
- [✔] 跳转至应用商店进行更新
- [✔] 使用下载链接直接下载APK并监控下载进度
- 监控下载信息
- 取消/暂停/继续下载
- 根据ID获取下载状态
- 安装APK
- 获取最后一次下载ID
- 修改通知栏显示内容
- [✔] 热更新
- [✔] 差异更新
-
iOS平台
- [✔] 根据App ID跳转至App Store更新
- [✔] 根据App ID获取当前在线版本
开发者为该插件付出了很多努力,如果你觉得有用,请考虑捐赠以支持开发者的工作。
快速开始
1. 添加依赖
首先,在pubspec.yaml
文件中添加r_upgrade
作为依赖项:
dependencies:
r_upgrade: last_version # 替换为最新版本号
2. 基本用法
从自定义网址更新 (适用于Android或iOS)
void upgradeFromUrl() async {
bool isSuccess = await RUpgrade.upgradeFromUrl('https://www.example.com');
print(isSuccess);
}
Android平台特定操作
获取Android应用商店列表
void getAndroidStores() async {
final stores = await RUpgrade.androidStores;
print(stores);
}
从应用商店获取版本号
void getVersionName() async {
final versionName = await RUpgrade.getVersionFromAndroidStore(AndroidStore.GOOGLE_PLAY);
print(versionName);
}
从应用商店启动更新
void upgradeFromAndroidStore() async {
bool isSuccess = await RUpgrade.upgradeFromAndroidStore(AndroidStore.GOOGLE_PLAY);
print('${isSuccess ? '跳转成功' : '跳转失败'}');
}
通过下载链接更新
确保应用程序具有必要的权限,并请求动态权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
添加下载监听器
RUpgrade.stream.listen((DownloadInfo info) {
// 处理下载信息
});
开始更新
void upgrade() async {
int id = await RUpgrade.upgrade(
'https://example.com/app-release.apk',
apkName: 'app-release.apk',
installType: RUpgradeInstallType.normal,
);
}
取消下载
void cancel() async {
bool isSuccess = await RUpgrade.cancel(id);
print(isSuccess);
}
安装APK
void install() async {
bool isSuccess = await RUpgrade.install(id);
print(isSuccess);
}
获取最后一次更新ID
void getLastUpgradeId() async {
int id = await RUpgrade.getLastUpgradedId();
print(id);
}
根据ID获取下载状态
void getDownloadStatus() async {
DownloadStatus status = await RUpgrade.getDownloadStatus(id);
print(status);
}
增量更新
void incrementUpgrade() async {
int id = await RUpgrade.upgrade(
'https://example.com/increment.patch',
fileName: 'increment.patch',
useDownloadManager: false,
installType: RUpgradeInstallType.none,
upgradeFlavor: RUpgradeFlavor.incrementUpgrade,
);
}
void installIncrement() async {
try {
await RUpgrade.install(id);
} catch (e) {
print('安装失败');
}
}
热更新
void hotUpgrade() async {
int id = await RUpgrade.upgrade(
'https://example.com/hot_update.zip',
fileName: 'hot_update.zip',
useDownloadManager: false,
installType: RUpgradeInstallType.none,
upgradeFlavor: RUpgradeFlavor.hotUpgrade,
);
bool isSuccess = await RUpgrade.install(id);
if (isSuccess) {
print('热更新成功');
Future.delayed(Duration(seconds: 3)).then((_) {
SystemNavigator.pop(animated: true);
});
} else {
print('热更新失败');
}
}
iOS平台特定操作
跳转至App Store更新
void upgradeFromAppStore() async {
bool isSuccess = await RUpgrade.upgradeFromAppStore('your AppId');
print(isSuccess);
}
获取App Store上的最新版本
void getVersionFromAppStore() async {
String versionName = await RUpgrade.getVersionFromAppStore('your AppId');
print(versionName);
}
示例代码
以下是一个完整的示例项目结构,展示了如何集成r_upgrade
插件并实现基本的功能。
import 'package:flutter/material.dart';
import 'package:r_upgrade/r_upgrade.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('r_upgrade Example')),
body: UpgradeScreen(),
),
);
}
}
class UpgradeScreen extends StatefulWidget {
@override
_UpgradeScreenState createState() => _UpgradeScreenState();
}
class _UpgradeScreenState extends State<UpgradeScreen> {
int? downloadId;
@override
void initState() {
super.initState();
RUpgrade.setDebug(true);
}
void startUpgrade() async {
downloadId = await RUpgrade.upgrade(
'https://example.com/app-release.apk',
apkName: 'app-release.apk',
installType: RUpgradeInstallType.normal,
);
setState(() {});
}
void cancelUpgrade() async {
if (downloadId != null) {
bool success = await RUpgrade.cancel(downloadId!);
print('取消结果: $success');
}
}
void pauseUpgrade() async {
if (downloadId != null) {
bool success = await RUpgrade.pause(downloadId!);
print('暂停结果: $success');
}
}
void resumeUpgrade() async {
if (downloadId != null) {
bool success = await RUpgrade.upgradeWithId(downloadId!);
print('恢复结果: $success');
}
}
void installApk() async {
if (downloadId != null) {
bool success = await RUpgrade.install(downloadId!);
print('安装结果: $success');
}
}
@override
Widget build(BuildContext context) {
return ListView(
children: <Widget>[
ListTile(
title: Text('开始更新'),
onTap: startUpgrade,
),
ListTile(
title: Text('取消更新'),
onTap: cancelUpgrade,
),
ListTile(
title: Text('暂停更新'),
onTap: pauseUpgrade,
),
ListTile(
title: Text('恢复更新'),
onTap: resumeUpgrade,
),
ListTile(
title: Text('安装APK'),
onTap: installApk,
),
],
);
}
}
这个示例展示了如何使用r_upgrade
插件来管理应用的更新流程,包括启动更新、取消更新、暂停和恢复更新以及安装新版本的APK。你可以根据自己的需求进一步扩展这些功能。
更多关于Flutter应用升级管理插件r_upgrade的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter应用升级管理插件r_upgrade的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用r_upgrade
插件进行应用升级管理的代码案例。r_upgrade
插件通常用于在应用内检测新版本、下载新版本并提示用户进行安装。以下是一个基本的实现步骤和代码示例。
步骤 1: 添加依赖
首先,在pubspec.yaml
文件中添加r_upgrade
依赖:
dependencies:
flutter:
sdk: flutter
r_upgrade: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来获取依赖。
步骤 2: 配置权限
在AndroidManifest.xml
和Info.plist
中添加必要的权限配置,特别是网络权限,因为下载新版本需要网络连接。
Android (AndroidManifest.xml)
<uses-permission android:name="android.permission.INTERNET"/>
iOS (Info.plist)
通常,iOS不需要额外的网络权限配置,但确保你的应用有网络访问能力。
步骤 3: 初始化并使用r_upgrade
在你的Flutter应用中,你可以按照以下方式初始化并使用r_upgrade
插件。
import 'package:flutter/material.dart';
import 'package:r_upgrade/r_upgrade.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
RUpgrade? _rUpgrade;
@override
void initState() {
super.initState();
// 初始化RUpgrade
_rUpgrade = RUpgrade(
// 配置你的升级服务器地址
checkUrl: 'https://your-upgrade-server.com/version.json',
// 配置其他参数,比如下载路径等(可选)
apkStorageDir: '/sdcard/Download/',
isForceUpgrade: false, // 是否强制升级
upgradeDialogParams: UpgradeDialogParams(
title: '应用升级',
upgradeContent: '发现新版本,请更新应用。',
cancelText: '取消',
upgradeText: '立即更新',
isShowIgnoreVersion: true, // 是否显示“忽略此版本”按钮
),
);
// 检查版本更新
_checkVersion();
}
Future<void> _checkVersion() async {
try {
bool hasUpdate = await _rUpgrade!.checkVersion();
if (hasUpdate) {
// 显示升级对话框
_rUpgrade!.showUpgradeDialog(context);
} else {
// 没有新版本
print('当前已是最新版本');
}
} catch (e) {
print('检查版本更新失败: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('应用升级管理示例'),
),
body: Center(
child: Text('检查更新中...'),
),
),
);
}
}
版本服务器返回的JSON示例
你的升级服务器应该返回一个JSON格式的数据,例如:
{
"versionCode": 2,
"versionName": "1.1.0",
"apkUrl": "https://your-upgrade-server.com/app-release.apk",
"changeLog": "修复了一些bug,增加了新功能。"
}
注意事项
- 权限处理:确保你的应用在运行时请求并获得了必要的权限(特别是Android 6.0及以上版本)。
- 错误处理:在实际应用中,添加更多的错误处理逻辑,以应对网络问题、文件读写问题等。
- 用户提示:根据实际需求自定义升级对话框的内容和样式。
通过以上步骤,你就可以在Flutter应用中使用r_upgrade
插件进行应用升级管理了。