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

时间:2019-11-12 02:27:50

标签: flutter dart

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

6 个答案:

答案 0 :(得分:12)

实际上,在2020年6月,Flutter带来了更多的可能性。其中:

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

enter image description here

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

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

enter image description here

适用于Android和iOS。 插件-https://pub.dev/packages/upgrader

3。。使用Firebase应用内消息传递。它使消息和通知形式具有灵活性。 -但是还有更多样板代码和工作。 +但是您可以在应用增长时将其用于其他消息和通知。

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

4。自己制作。与Firebase消息传递相比,代码可能更少。

答案 1 :(得分:1)

您可以使用https://pub.dev/packages/flutter_downloader并让用户直接从您的应用下载更新(apk文件)

答案 2 :(得分:0)

如果您想使用automatic update,则必须不使用Google Play商店。

  • 您需要通过将apk托管在某个地方(例如github)来自己处理版本,并检查是否存在新版本并提示用户是否要更新应用。
  • 然后在后台下载新的apk。 (您可以使用this软件包)
  • 使用here中提到的一种方法下载完apk后再打开它。
  • 然后,这会提示用户是否允许从您的应用安装APK

如果您想使用Play商店进行操作,则存在一个插件。 in_app_update

如果您还想要ios解决方案,那么就像Igor所说,这是不可能的。您可以将用户重定向到AppStore。

答案 3 :(得分:0)

我的实现方式是使用变量并比较数据库中的变量。可能是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上的应用内更新

答案 4 :(得分:0)

也许这对您有帮助

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;
}

答案 5 :(得分:-1)

您可以在Android上执行此操作,但如果不使用AppStore,则无法在iOS上执行。您可以在this question中阅读有关如何在Android上执行操作的信息。