Flutter应用更新管理插件native_updater的使用
Flutter应用更新管理插件native_updater的使用
native_updater
是一个 Flutter 插件,用于在检测到最新版本时通过原生对话框提示用户更新应用。无论是应用商店版本还是用户自定义版本,都可以使用此插件进行更新提示。
安装
通过 GitHub 安装(仅限测试)
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.3
# Add this inside pubspec.yaml
native_updater:
git: https://github.com/loadsmileau/native_updater
设置
Android
无需额外设置,直接使用即可。
iOS
为了在 Cupertino Alert Dialog 中显示应用名称,需要在 <project root>/ios/Runner/Info.plist
文件中添加以下键值对:
<key>CFBundleDisplayName</key>
<string>YOUR APP NAME</string>
使用
只需在需要显示更新提示的地方添加以下代码,插件会处理其余部分:
NativeUpdater.displayUpdateAlert(
context,
forceUpdate: true,
);
或者使用可选参数来自定义提示:
NativeUpdater.displayUpdateAlert(
context,
forceUpdate: true,
appStoreUrl: '<Your App Store URL>',
playStoreUrl: '<Your Play Store URL>',
iOSDescription: '<Your iOS Description>',
iOSUpdateButtonLabel: '<Your iOS Update Button Label>',
iOSCloseButtonLabel: '<Your iOS Close Button Label>',
iOSIgnoreButtonLabel: '<Your iOS Ignore Button Label>',
iOSAlertTitle: '<Your Dialog Title>',
);
参数说明
必填参数
- context:构建此小部件的位置。
- forceUpdate:是否强制更新。设置为
true
表示强制更新,设置为false
表示允许用户稍后更新。
可选参数
- appStoreUrl:iOS 应用商店 URL,用于启动应用商店页面。参考 如何查找应用商店 URL。
- playStoreUrl:Google Play 商店 URL,用于启动 Play 商店页面。参考 如何查找应用商店 URL。
- iOSDescription:自定义
UpdateCupertinoAlert
的提示描述。默认值为"<App Name> requires that you update to the latest version. You cannot use this app until it is updated."
或"<App Name> recommends that you update to the latest version. You can keep using this app while downloading the update."
。 - iOSUpdateButtonLabel:自定义
UpdateCupertinoAlert
的更新按钮标签。默认值为"Update"
。 - iOSCloseButtonLabel:自定义
UpdateCupertinoAlert
的关闭按钮标签。默认值为"Close App"
。 - iOSIgnoreButtonLabel:自定义
UpdateCupertinoAlert
的忽略按钮标签。默认值为"Later"
。 - iOSAlertTitle:自定义
UpdateCupertinoAlert
的对话框标题。默认值为"Update Available"
。
完整示例
以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 native_updater
插件:
import 'package:flutter/material.dart';
import 'package:native_updater/native_updater.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'native_updater example',
home: Home(),
);
}
}
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
void initState() {
super.initState();
checkVersion();
}
Future<void> checkVersion() async {
/// 假设从 HTTP 请求响应中获取的状态码为 412
/// 状态码 412 要求强制更新
int statusCode = 412;
/// 本地版本号
int localVersion = 9;
/// 服务器上的最新版本号
int serverLatestVersion = 10;
Future.delayed(Duration.zero, () {
if (statusCode == 412) {
NativeUpdater.displayUpdateAlert(
context,
forceUpdate: true,
appStoreUrl: '<Your App Store URL>',
playStoreUrl: '<Your Play Store URL>',
iOSDescription: '<Your iOS description>',
iOSUpdateButtonLabel: 'Upgrade',
iOSCloseButtonLabel: 'Exit',
errorText: "Error",
errorCloseButtonLabel: "Close",
errorSubtitle: "This version of the app isn't legit"
);
} else if (serverLatestVersion > localVersion) {
NativeUpdater.displayUpdateAlert(
context,
forceUpdate: false,
appStoreUrl: '<Your App Store URL>',
playStoreUrl: '<Your Play Store URL>',
iOSDescription: '<Your description>',
iOSUpdateButtonLabel: 'Upgrade',
iOSIgnoreButtonLabel: 'Next Time',
);
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Your App'),
),
body: Center(
child: Text('Testing...'),
),
);
}
}
材料设计提示截图
灵活更新流程示例
即时更新流程示例
Cupertion 提示截图
强制更新 | 可稍后更新 |
---|---|
希望这些信息对你有所帮助!如果有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter应用更新管理插件native_updater的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter应用更新管理插件native_updater的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用native_updater
插件进行应用更新管理的示例代码。native_updater
插件允许你检查应用的更新情况,并从指定的服务器下载和安装新版本。
首先,你需要在你的pubspec.yaml
文件中添加native_updater
依赖:
dependencies:
flutter:
sdk: flutter
native_updater: ^最新版本号 # 请替换为最新的版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤使用native_updater
插件:
-
配置插件:
你需要在应用的
main.dart
或其他合适的位置初始化NativeUpdater
插件,并设置检查更新的URL。
import 'package:flutter/material.dart';
import 'package:native_updater/native_updater.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
// 初始化NativeUpdater
NativeUpdater.init(
checkUrl: 'https://你的服务器地址/update.json', // 更新信息的JSON文件URL
androidNotificationTitle: '应用更新',
androidNotificationContent: '发现新版本,请更新',
iosAlertTitle: '应用更新',
iosAlertMessage: '发现新版本,是否立即更新?',
iosAlertCancelButton: '取消',
iosAlertOkButton: '更新',
);
// 检查更新
_checkForUpdates();
}
Future<void> _checkForUpdates() async {
try {
bool hasUpdate = await NativeUpdater.checkForUpdates();
if (hasUpdate) {
// 显示更新对话框
bool userAccepted = await NativeUpdater.showUpdateDialog();
if (userAccepted) {
// 用户同意更新
await NativeUpdater.downloadAndUpdate();
}
} 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文件,其中包含应用的更新信息。例如:
{
"mandatory": false, // 是否强制更新
"versionCode": 2, // 新版本的版本号
"versionName": "2.0", // 新版本的版本名
"apkUrl": "https://你的服务器地址/new_version.apk", // 新版本APK的下载地址
"releaseNotes": "本次更新修复了一些已知问题并优化了性能。" // 更新说明
}
-
注意事项:
- 确保你的服务器支持HTTPS,因为大多数现代操作系统和应用商店要求通过安全的连接下载更新。
- 在Android上,你可能需要在
AndroidManifest.xml
中配置一些权限,例如INTERNET
和WRITE_EXTERNAL_STORAGE
。 - iOS上可能需要配置一些额外的设置,以确保应用可以下载和安装新的APK文件。
这个示例展示了如何使用native_updater
插件在Flutter应用中实现基本的更新管理功能。根据你的具体需求,你可能需要进一步定制和扩展这个示例。