Flutter应用升级管理插件app_upgrader的使用

Flutter应用升级管理插件app_upgrader的使用

描述

app_upgrader 是一个用于管理Flutter应用升级的插件,它可以帮助开发者检查应用的最新版本,并根据需要提示用户进行更新。不过需要注意的是,该插件已经停止维护(DISCONTINUED),因此在使用时请谨慎评估其适用性。建议在选择插件时考虑其他替代方案。

完整示例Demo

下面是一个完整的示例代码,展示了如何使用 app_upgrader 插件来管理应用的升级逻辑。这个示例包括了如何获取版本信息、判断是否需要更新以及如何提示用户进行更新。

import 'dart:io';

import 'package:app_upgrader/app_upgrader.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

// 模拟从服务器或Firebase Remote Config获取的Android版本信息
Map<String, dynamic> androidVersionInfo = {
  "41452": {"update_type": "forceUpdate"},  // 强制更新
  "41451": {"update_type": "flexible"},     // 灵活更新
  "41450": {"update_type": "none"}          // 无需更新
};

// 模拟从服务器或Firebase Remote Config获取的iOS版本信息
Map<String, dynamic> iosVersionInfo = {
  "10.3.1": {"update_type": "forceUpdate"},  // 强制更新
  "10.3.0": {"update_type": "none"},         // 无需更新
  "10.2.9": {"update_type": "flexible"}      // 灵活更新
};

// 自定义版本信息获取器
class MyVersionInfoFetcher implements VersionInfoFetcher {
  // 实现从服务器或Firebase Remote Config获取版本信息的方法
  [@override](/user/override)
  Future<Map<String, dynamic>> fetchVersionInfo() {
    // 根据平台选择对应的版本信息
    final versionInfo = Platform.isAndroid ? androidVersionInfo : iosVersionInfo;
    return Future.value(versionInfo);
  }
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'App Upgrader Test App',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: AppUpgrader(
        // 设置应用的Bundle ID,用于在应用商店中查找应用
        bundleId: Platform.isAndroid
            ? 'org.telegram.messenger'  // Android平台的Bundle ID
            : 'ph.telegra.Telegraph',   // iOS平台的Bundle ID
        versionInfoFetcher: MyVersionInfoFetcher(),  // 使用自定义的版本信息获取器
        child: const MyHomePage(title: 'App Upgrader Test App'),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: const Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Prod App with App Updater'),  // 显示应用升级提示
          ],
        ),
      ),
    );
  }
}

更多关于Flutter应用升级管理插件app_upgrader的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用升级管理插件app_upgrader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于在Flutter应用中使用app_upgrader插件进行应用升级管理,以下是一个简单的代码示例,展示了如何使用该插件来检查应用的更新情况,并提示用户进行升级。

首先,确保你已经在pubspec.yaml文件中添加了app_upgrader依赖:

dependencies:
  flutter:
    sdk: flutter
  app_upgrader: ^x.y.z  # 请替换为最新版本号

然后,运行flutter pub get来获取依赖。

接下来,在你的Flutter应用中,你可以按照以下步骤使用app_upgrader

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:app_upgrader/app_upgrader.dart';
  1. 定义升级检查逻辑
void checkForUpdates() async {
  final AppUpgrader appUpgrader = AppUpgrader(
    androidAppId: 'com.example.yourapp', // 替换为你的Android应用ID
    iosAppId: '123456789', // 替换为你的iOS应用ID(App Store ID)
    currentVersion: '1.0.0', // 替换为你的当前应用版本号
    serverSupportsBasicAuth: false,
    channel: UpgradeChannel.stable, // 可以是stable, beta, alpha, 或你的自定义渠道
    apiUrl: 'https://your-update-server.com/api/update-check', // 替换为你的更新检查API URL
    // 如果你的API需要身份验证,可以添加以下参数:
    // username: 'your-username',
    // password: 'your-password',
  );

  final UpgradeInfo upgradeInfo = await appUpgrader.checkForUpgrade();

  if (upgradeInfo.mandatoryUpgrade) {
    // 强制升级,显示升级对话框或引导用户升级
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: Text('强制更新'),
        content: Text('您必须更新此应用才能继续使用。'),
        actions: <Widget>[
          FlatButton(
            child: Text('更新'),
            onPressed: () {
              // 打开应用商店页面或下载页面
              appUpgrader.openAppDownloadPage();
            },
          ),
        ],
      ),
    );
  } else if (upgradeInfo.newVersion != null) {
    // 可选升级,提示用户有新版本可用
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: Text('新版本可用'),
        content: Text('版本 ${upgradeInfo.newVersion!} 现已发布。'),
        actions: <Widget>[
          FlatButton(
            child: Text('取消'),
            onPressed: () {},
          ),
          FlatButton(
            child: Text('更新'),
            onPressed: () {
              appUpgrader.openAppDownloadPage();
            },
          ),
        ],
      ),
    );
  } else {
    // 没有新版本
    print('当前已是最新版本');
  }
}
  1. 在应用的适当位置调用checkForUpdates方法

通常,你可以在应用的启动页面或某个设置页面中调用这个方法。例如,在MyAppinitState方法中:

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    // 检查更新
    checkForUpdates();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // 你的应用逻辑
    );
  }
}

注意:

  • androidAppIdiosAppId需要替换为你实际的应用ID。
  • currentVersion需要替换为你当前的应用版本号。
  • apiUrl需要替换为你的更新检查API的URL。如果你的更新服务器需要身份验证,可以添加usernamepassword参数。

这个示例展示了如何使用app_upgrader插件来检查应用的更新情况,并根据检查结果提示用户进行升级。根据实际需求,你可以进一步自定义升级提示的UI和逻辑。

回到顶部