這是一個記錄貼,關於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圖標右邊有個三個小點按鈕點一下,會有拷貝鏈接字樣,拷貝後找個地方粘貼一下就能看到了!拿微信舉個例子給大家截個圖
小編剛踩坑踩出來的,有不對的地方還請大佬指點~