Flutter在新版本可用时自动更新应用程序

irtuqstp  于 2022-12-24  发布在  Flutter
关注(0)|答案(7)|浏览(949)

如果不使用Google Play商店,如何在新版本发布时实现应用的自动更新?我使用JSON来检查版本。

0sgqnhkj

0sgqnhkj1#

==== 2021年12月更新
新的不错的包,推荐这一个https://pub.dev/packages/new_version
====其实在2020年6月,我们有了更多的可能性,其中包括:

**1.**在应用内进行更新。如果应用有新版本,则显示两种通知。

插件-https://pub.dev/packages/in_app_update(仅适用于Android,iOS不支持此类功能)

**2.**当应用商店中有更新版本的应用可用时,会显示一个简单的警报提示小部件或卡片。

工程Android和iOS.插件-https://pub.dev/packages/upgrader

**3.**使用Firebase应用内消息传递。它在消息和通知形式方面提供了灵活性。

  • 但是需要更多的样板代码和工作。
  • 但是,当您的应用不断增长时,您可以将其用于其他消息和通知。

https://firebase.google.com/docs/in-app-messaging

**4.**自己制作。也许比Firebase消息传递的代码更少。

dffbzjpn

dffbzjpn2#

如果你想要一个automatic update,不使用Google Play商店是不可能的。

  • 你需要自己处理版本控制,把apk托管在某个地方(比如github),检查是否存在新版本,并提示用户是否要更新应用程序。
  • 然后在后台下载新的apk.(你可以使用this包)
  • 然后打开apk当它完成下载使用的方法之一提到here
  • 然后会提示用户是否允许从应用安装apk

如果你想使用Play商店,可以使用一个插件。in_app_update其中包含Android应用内更新functionality

他们在github上的官方示例
如果你也想要一个iOS解决方案,那就不可能了。你可以把用户重定向到AppStore。更多关于苹果应用程序可用的distribution methods的信息。
如果您有企业许可证,this方法 * 可能 * 会起作用。
然而,如果你有一个服务器在运行,那么就有一个端点来查询最新版本,另一个端点允许用户下载apk。
如果你没有服务器,可以使用github releases。

zpgglvta

zpgglvta3#

也许这个能帮你

Backend backend = Backend.instance();
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String packageName = packageInfo.packageName;

Response r;
try {

  r = await backend.io.get("https://play.google.com/store/apps/details?id=$packageName&hl=en");
  if(r.statusCode == 200){
    String data = r.data;

    String pat1 = 'Current Version</div><span class="htlgb"><div class="IQ1z0d"><span class="htlgb">';
    String pat2 = '</span>';

    int p1 = data.indexOf(pat1) + pat1.length;
    String f = data.substring(p1, data.length);
    int p2 = f.indexOf(pat2);

    String currentVersion = f.substring(0, p2);

    return currentVersion;
  }

  return null;

} catch (e) {

  errors = backend.interceptor.errors;

  return null;
}
zlhcx6iw

zlhcx6iw4#

重要说明:

如果您通过模拟器(AVD)安装应用,则不会显示更新通知,因为测试应用的应用签名密钥证书与Google Play使用的证书不同。
因此,请确保通过Google Play自己安装您的应用程序(而不是通过android studio),这样,更新通知将起作用,签署的应用程序证书与google play提供给您的应用程序的证书相同。

ldxq2e6h

ldxq2e6h5#

您可以使用此软件包
https://pub.dev/packages/upgrader
将您的整个小部件 Package 在***UpgradeAlert***小部件中,如下所示-〉

Scaffold(
          appBar: AppBar(title: Text('Upgrader Example')),
          body: UpgradeAlert(
            child: Center(child: Text('Your widget is here')),
          )),

如果更新可用
第一节第一节第一节第一节第一次

ztyzrc3y

ztyzrc3y6#

此方法使您能够更好地控制用户的更新流,而不是依赖于第三方UI解决方案。
首先,安装upgrader软件包并使用其API获取App Store或Play Store上的当前版本。然后,将其与用户设备上当前安装的应用版本进行比较。您可以使用package_info_plus软件包执行此操作。要直接比较版本名称,请使用version软件包。最后,如果应用商店版本高于已安装版本,您可以决定要执行的操作。例如,您可以显示警报对话框、snackbar或通知消息以引导用户访问应用商店,或者您可以实现自己的UI。
以下是upgrader包的API使用方法:

import 'dart:developer';
import 'dart:io';
import 'package:html/dom.dart';
import 'package:upgrader/upgrader.dart';

Future<String?> getStoreVersion(String myAppBundleId) async {
  String? storeVersion;
  if (Platform.isAndroid) {
    PlayStoreSearchAPI playStoreSearchAPI = PlayStoreSearchAPI();
    Document? result = await playStoreSearchAPI.lookupById(myAppBundleId);
    if (result != null) storeVersion = PlayStoreResults.version(result);
    log('PlayStore version: $storeVersion}');
  } else if (Platform.isIOS) {
    ITunesSearchAPI iTunesSearchAPI = ITunesSearchAPI();
    Map<dynamic, dynamic>? result = await iTunesSearchAPI.lookupByBundleId(myAppBundleId);
    if (result != null) storeVersion = ITunesResults.version(result);
    log('AppStore version: $storeVersion}');
  } else {
    storeVersion = null;
  }
  return storeVersion;
}
yks3o0rb

yks3o0rb7#

我的实现方式是使用一个变量,并从一个数据库比较该变量。它可以是Firebase或任何其他。对于这个例子,我将使用Firebase实时数据库。

int version = 1;
void checkLatestVersion(){
    
//Here i am getting just the value of the latest version stored on firebase.    
databaseReference.child("version").child("latestRealase").once().then((snapshot){
      if(snapshot.value != null){
          int versionNumberFromDatabase = int.parse(snapshot.value));
          if(versionNumberFromDatabase>version){
             print("the app needs to be updated");
             //HERE you can create a dialog to display and force users to update
          }else{
             print("The app doesn't to be need updated ");
          }
      }
     });
 }

上面的例子适用于Android和iOS,但有一个包可以让你从应用本身更新应用。查看文档。
in_app_update 1.1.7
这将使用官方Android API在Android上启用应用内更新

相关问题