Flutter如何实现自动升级

在Flutter应用中如何实现自动更新功能?目前我的应用需要定期更新,但用户手动到应用商店下载很麻烦。想请教大家:1) Flutter是否有官方推荐的自动更新方案?2) 是否需要区分Android和iOS平台来处理?3) 能否实现后台静默下载更新包?4) 如何确保更新包的安全性和完整性校验?求具体实现思路或推荐的开源库。

2 回复

Flutter实现自动升级主要通过以下步骤:

  1. 检测版本:从服务器获取最新版本号,与本地版本比较。
  2. 下载APK:使用package_info_plus获取当前版本,http请求获取更新信息,flutter_downloader下载新APK。
  3. 安装APK:使用open_fileinstall_plugin触发安装。

注意:Android需处理存储权限和安装未知来源应用权限。

更多关于Flutter如何实现自动升级的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现自动升级,可以通过以下步骤实现:

1. 检查更新

使用package_info_plus获取当前版本,与服务器API对比最新版本:

import 'package:package_info_plus/package_info_plus.dart';

Future<void> checkUpdate() async {
  PackageInfo packageInfo = await PackageInfo.fromPlatform();
  String currentVersion = packageInfo.version;

  // 调用API获取服务器最新版本信息
  final response = await http.get(Uri.parse('https://your-api.com/latest-version'));
  if (response.statusCode == 200) {
    final latestVersion = json.decode(response.body)['version'];
    if (latestVersion != currentVersion) {
      _showUpdateDialog(); // 弹出更新提示
    }
  }
}

2. 下载APK

使用flutter_downloader实现APK下载:

# pubspec.yaml
dependencies:
  flutter_downloader: ^1.10.2
import 'package:flutter_downloader/flutter_downloader.dart';

void downloadAPK(String url) {
  final taskId = await FlutterDownloader.enqueue(
    url: url,
    savedDir: '/storage/emulated/0/Download',
    showNotification: true,
    openFileFromNotification: true,
  );
}

3. 安装APK

使用open_file插件打开下载的APK:

import 'package:open_file/open_file.dart';

void installAPK(String path) {
  OpenFile.open(path);
}

4. 配置权限(Android)

android/app/src/main/AndroidManifest.xml中添加:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

5. 流程整合

void _showUpdateDialog() {
  showDialog(
    context: context,
    builder: (BuildContext context) {
      return AlertDialog(
        title: Text('发现新版本'),
        actions: [
          TextButton(
            onPressed: () => downloadAPK('https://your-server.com/app.apk'),
            child: Text('立即更新'),
          ),
        ],
      );
    },
  );
}

注意事项:

  • iOS限制:需通过App Store更新,只能跳转到Store页面。
  • 文件路径:Android 10+需使用getExternalStorageDirectory获取路径。
  • 权限处理:Android 6.0+需动态申请存储权限。

此方案适用于Android平台,iOS需调用AppStore链接实现更新跳转。

回到顶部