You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用如何实现从Play Store/App Store自动静默更新?

Flutter应用实现无感知静默自动更新

Google Play Store 静默更新方案

Google Play本身支持应用内静默更新,但得满足几个前提:

  • 应用必须是Google Play发布的正式版本
  • 用户设备开启了「自动更新应用」(系统设置里的选项)
  • 设备处于Wi-Fi环境下(默认设置,用户可手动改成允许移动数据更新)

如果想在应用内主动触发静默更新,可以用in_app_update插件,不过这个插件的静默更新只支持灵活更新模式,得符合Google Play的政策:

  1. 先在pubspec.yaml里加依赖:
dependencies:
  in_app_update: ^4.1.0
  1. 写检查更新并触发静默更新的逻辑:
import 'package:in_app_update/in_app_update.dart';

Future<void> checkForSilentUpdate() async {
  try {
    final updateInfo = await InAppUpdate.checkForUpdate();
    if (updateInfo.updateAvailability == UpdateAvailability.updateAvailable) {
      // 触发灵活更新:后台静默下载,完成后自动安装
      await InAppUpdate.startFlexibleUpdate();
      // 更新完成后可选择重启应用(可选操作)
      InAppUpdate.completeFlexibleUpdate();
    }
  } catch (e) {
    // 处理更新失败的情况,比如网络问题
    print('更新出错: $e');
  }
}

灵活更新不会弹框打扰用户,大部分情况下是完全无感知的,少数设备可能需要用户确认,但整体体验接近静默。

Apple App Store 近似静默更新方案

Apple的App Store政策不允许完全无感知的静默更新(企业级应用除外),但可以实现近似效果:后台检查更新、自动下载,等用户下次启动应用时自动安装(由iOS系统处理)。

实现步骤:

  1. 添加必要依赖:
dependencies:
  package_info_plus: ^4.0.0
  http: ^0.13.5
  1. 写版本检查和触发后台下载的逻辑:
import 'package:package_info_plus/package_info_plus.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

Future<void> checkAppStoreUpdate() async {
  final packageInfo = await PackageInfo.fromPackageInfo();
  final currentVersion = packageInfo.version;
  // 把这里的ID换成你的App Store应用ID
  final appId = '123456789';
  
  final response = await http.get(Uri.parse(
    'https://itunes.apple.com/lookup?id=$appId'
  ));
  
  if (response.statusCode == 200) {
    final data = json.decode(response.body);
    final latestVersion = data['results'][0]['version'];
    
    if (latestVersion != currentVersion) {
      // iOS系统会自动处理后台下载,只要用户开了「App自动更新」
      // 这里不用额外写下载代码,静默记录状态就行,不用弹框
    }
  }
}

注意:iOS的自动更新完全依赖用户的系统设置,应用没法强制触发,只能确保检查到新版本后,系统能自动下载安装。

通用注意事项

  • 政策合规:Google Play和App Store都有更新相关的规则,别碰红线,不然应用可能被下架
  • 网络限制:建议只在Wi-Fi环境下触发静默更新,避免耗用户的移动数据
  • 版本对比:版本号对比要严谨,比如处理1.0.1和1.0.10这种多段版本号的情况
  • 错误处理:一定要加异常捕获,别让更新逻辑搞崩应用

内容的提问来源于stack exchange,提问作者Flutter Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:05:18