如何使用upgrader或其他方案高效实现Flutter in_app_update应用内升级
Flutter 应用内更新实现方案
方案一:upgrader 快速接入(优先推荐)
适合全平台通用场景,无需自行处理原生逻辑,接入成本极低。
- 第一步:添加依赖
在pubspec.yaml的dependencies节点下添加配置,版本号替换为当前最新稳定版即可:
dependencies: upgrader: ^最新稳定版本号
- 第二步:基础接入
仅需在应用根节点包裹UpgradeAlert组件,启动应用时会自动检测版本弹出更新提示:
import 'package:upgrader/upgrader.dart'; import 'package:flutter/material.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: '应用内更新Demo', home: UpgradeAlert( // 配置强制更新,禁止用户关闭弹窗 canDismissDialog: false, // 配置最低允许版本,低于该版本强制更新 minAppVersion: '2.1.0', // 自定义弹窗文案 dialogTitle: '发现新版本', dialogMessage: '当前版本存在安全风险,请更新到最新版本继续使用', updateButtonText: '立即更新', child: const HomePage(), ), ); } } class HomePage extends StatelessWidget { const HomePage({super.key}); @override Widget build(BuildContext context) { return Scaffold(appBar: AppBar(title: const Text("首页"))); } }
- 注意事项
- 安卓端需要在
AndroidManifest.xml中申请安装应用权限:<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> - iOS端会自动跳转至App Store对应应用页面,无需额外配置
- 安卓端需要在
方案二:in_app_update 官方商店更新流接入
仅支持通过Google Play、App Store分发的应用,走系统原生更新流程,更符合商店合规要求。
- 第一步:添加依赖
在pubspec.yaml的dependencies节点下添加配置,版本号替换为当前最新稳定版即可:
dependencies: in_app_update: ^最新稳定版本号
- 第二步:端侧配置
- 安卓端:
android/app/build.gradle中的compileSdkVersion需至少设置为31,测试时需将测试包上传至Google Play内部测试/封闭测试轨道,本地debug包无法触发更新检测 - iOS端:需在Xcode中配置正确的App Store Connect应用ID,测试时需使用TestFlight打包验证
- 安卓端:
- 第三步:核心逻辑实现
import 'package:in_app_update/in_app_update.dart'; // 应用启动时调用该方法检测更新 Future<void> checkAppUpdate() async { InAppUpdateState updateState = await InAppUpdate.checkForUpdate(); // 存在可用更新 if (updateState.updateAvailability == UpdateAvailability.updateAvailable) { // 方案A:强制立即更新,弹窗无法关闭,更新完成前无法使用应用 await InAppUpdate.performImmediateUpdate(); // 方案B:柔性更新,用户可继续使用应用,后台静默下载完成后提示安装 // await InAppUpdate.startFlexibleUpdate(); // 柔性更新下载完成后调用该方法触发安装 // await InAppUpdate.completeFlexibleUpdate(); } }
常见问题排查
- upgrader无更新弹窗:确认
pubspec.yaml中的version字段格式为x.y.z+build号,版本号规则符合语义化版本规范 - in_app_update检测不到更新:确认测试包的包名、签名/证书、版本号和应用商店后台上传的包完全一致
- 安卓安装更新失败:确认已开启应用的「安装未知应用」权限,targetSdkVersion不低于30
内容的提问来源于stack exchange,提问作者s4n
相关产品推荐
相关产品推荐

