Flutter应用更新管理插件native_updater的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter应用更新管理插件native_updater的使用

pub package

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...'),
      ),
    );
  }
}

材料设计提示截图

灵活更新流程示例

Android Flexible Flow

即时更新流程示例

Android Immediate Flow

Cupertion 提示截图

强制更新 可稍后更新
Force Update Can Update Later

希望这些信息对你有所帮助!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

更多关于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插件:

  1. 配置插件

    你需要在应用的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('检查更新中...'),
        ),
      ),
    );
  }
}
  1. 服务器端的更新信息JSON文件

    你的服务器需要提供一个JSON文件,其中包含应用的更新信息。例如:

{
  "mandatory": false, // 是否强制更新
  "versionCode": 2,   // 新版本的版本号
  "versionName": "2.0", // 新版本的版本名
  "apkUrl": "https://你的服务器地址/new_version.apk", // 新版本APK的下载地址
  "releaseNotes": "本次更新修复了一些已知问题并优化了性能。" // 更新说明
}
  1. 注意事项

    • 确保你的服务器支持HTTPS,因为大多数现代操作系统和应用商店要求通过安全的连接下载更新。
    • 在Android上,你可能需要在AndroidManifest.xml中配置一些权限,例如INTERNETWRITE_EXTERNAL_STORAGE
    • iOS上可能需要配置一些额外的设置,以确保应用可以下载和安装新的APK文件。

这个示例展示了如何使用native_updater插件在Flutter应用中实现基本的更新管理功能。根据你的具体需求,你可能需要进一步定制和扩展这个示例。

回到顶部