Flutter實現APP更新

這是一個記錄貼,關於flutter app內部更新網上有很多帖子,用package_info、path_provider、open_file、flutter_downloader這四個插件實現檢測APP版本信息,需要更新後執行下載、安裝任務~

但是小編不是專業Android開發,使用flutter_downloader的時候程序報各種錯,網上各種找辦法解決未果後決定放棄這個路線,當需要更新咱跳轉到手機瀏覽器進行下載安裝(嘿嘿,是不是機智的一匹~),這裏主要說一下ios更新,要跳轉到App Store更新~

下面上代碼:

class HomePage extends StatefulWidget {
    HomePage({Key key}) : super(key: key);
    _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
    @override
    void initState () {
        Future.delayed(Duration(seconds: 3), (){
            _checkVersion();
        });
    }

    //我們可以在APP所處服務器上建一個version.json文件,用來保存版本信息和更新信息,每次進APP去獲取裏面的內容,然後和手機上APP版本比較
    void _checkVersion () async {
        PackageInfo packageInfo = await PackageInfo.fromPlatform();
        //APP的versionName
        String version = packageInfo.version;
        //APP的versionCode
        String buildNumber = packageInfo.buildNumber;
        //下面進行判斷,Android還是ios
        if (Platform.isAndroid) {
            var api = "你的服務器路徑/version.json";
            final res = await Dio().get(api);
            if (res.statusCode == 200) {
                //這裏小編直接比較versionCode了,因爲直接比較一個數字好比較
                //如果想比較versionName也可以,思路是先把字符串通過split(".")分割成一個數組,然後分別比較兩個數組對應index的兩個值,只要有一個小於服務器上的值就提示更新就行了
                if (int.parse(buildNumber) < int.parse(res.data["versionCode"])) {
                showDialog(
                    context: context,
                    //強制更新,不可以點擊空白區域關閉,不需要可以不要
                    barrierDismissible: false,
                    builder: (BuildContext context){
                        return AlertDialog(
                            title: Text("提示!"),
                            content: Text("檢測到新版本,是否更新?"),
                            actions: <Widget>[
                                FlatButton(
                                    child: Text("立即更新"),
                                    onPressed: (){
                                        this._launcherApp();
                                    },
                                ),
                                FlatButton(
                                    child: Text("稍後再說"),
                                    onPressed: (){
                                        exit(0);
                                    },
                                ),
                            ],
                        );
                    }
                );
            }
        } else {
            Fluttertoast.showToast(
                msg: "服務器錯誤",
                gravity: ToastGravity.CENTER,
                timeInSecForIos: 3
            );
        }
    } else if (Platform.isIOS) {
        //這裏比較版本可以和上面一樣,小編這裏版本號搞成了固定的三個數,直接轉成int比較了
        version = version.replaceAll(".", "");
        //通過下面的路徑獲取你的APP在App Store Connect上面的版本號,截圖在下面會貼上來
        var iosApi = "https://itunes.apple.com/cn/lookup?id=這裏是你的APP成功上傳並審覈後的ID,如何獲取下面會貼";
        final res = await Dio().get(iosApi);
        //然後你就會或得一個版本號
        String oldVersion = json.decode(res.data)["results"][0]["version"];
        oldVersion = oldVersion.replaceAll(".", "");
        if (int.parse(version) < int.parse(oldVersion)) {
            showDialog(
                context: context,
                barrierDismissible: false,
                builder: (BuildContext context){
                    return AlertDialog(
                        title: Text("提示!"),
                        content: Text("檢測到新版本,是否更新?"),
                        actions: <Widget>[
                            FlatButton(
                                child: Text("立即更新"),
                                onPressed: (){
                                    this._launcherApp();
                                },
                            ),
                            FlatButton(
                                child: Text("稍後再說"),
                                onPressed: (){
                                    //退出程序
                                    exit(0);
                                },
                            ),
                        ],
                    );
                }
            );
         }
      }
    }

    _launcherApp () async {
        if (Platform.isAndroid) {
          var url = "你的Android apk服務器路徑";
          if (await canLaunch(url)){
            await launch(url);
          } else {
            Fluttertoast.showToast(
              msg: "無法加載",
              gravity: ToastGravity.CENTER,
              timeInSecForIos: 3
            );
          }
        } else if (Platform.isIOS) {
          //ios跳轉appstore更新
          var url = "https://itunes.apple.com/cn/app/id與上面的ID一樣";
          if (await canLaunch(url)) {
            await launch(url);
          } else {
            Fluttertoast.showToast(
              msg: "無法加載",
              gravity: ToastGravity.CENTER,
              timeInSecForIos: 3
            );
          }
        }
      }
}

兩個跳轉都可以跳轉,恭喜你成功了~ 

下面是幾個附件:

version.json:

{
    "versionName": "1.0.0",
    "versionCode": "00",
    "versionMsg": "對系統進行了調整優化,修復bug"
}

有關App Store Connect上APP信息:

這裏就有你的APP版本號~,獲取到數據後是下面這樣嬸兒的,

{
	"resultCount":1,
	"results": [
		{
			"appletvScreenshotUrls":[], 
			"screenshotUrls":[], 
			"ipadScreenshotUrls":[],
			"artworkUrl512":"",
			"isGameCenterEnabled":false,
			"artworkUrl60":"",
			"artworkUrl100":"",
			"artistViewUrl":"",
			"advisories":[],
			"features":[], 
			"supportedDevices":[],
			"kind":"software",
			"languageCodesISO2A":["EN"],
			"fileSizeBytes":"",
			"averageUserRatingForCurrentVersion":0,
			"userRatingCountForCurrentVersion":0,
			"trackContentRating":"4+",
			"averageUserRating":0,
			"trackViewUrl":"",
			"contentAdvisoryRating":"4+",
			"trackCensoredName":"",
			"trackId":,
			"trackName":"",
			"releaseDate":"2020-06-09T07:00:00Z",
			"genreIds":[],
			"formattedPrice":"免費",
			"primaryGenreName":"Business",
			"isVppDeviceBasedLicensingEnabled":true,
			"minimumOsVersion":"8.0",
			"sellerName":"",
			"currentVersionReleaseDate":"2020-06-09T20:55:10Z",
			"primaryGenreId":,
			"currency":"CNY",
			"description":"",
			"artistId":,
			"artistName":"",
			"genres":["商務", "工具"],
			"price":0.00,
			"bundleId":"",
                        //這個就是版本號
			"version":"1.0",
			"wrapperType":"software",
			"userRatingCount":0
		}
	]
}

下面的操作就按上面代碼走了~

如何獲取已上架APP的ID?

用你的iPhone打開App Store,搜索你的APP名稱(上架了就會搜索到),點擊進到詳情裏面去,你的APP圖標右邊有個三個小點按鈕點一下,會有拷貝鏈接字樣,拷貝後找個地方粘貼一下就能看到了!拿微信舉個例子給大家截個圖

小編剛踩坑踩出來的,有不對的地方還請大佬指點~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章