題記 —— 執劍天涯,從你的點滴積累開始,所及之處,必精益求精,即是折騰每一天。
重要訊息
本文章將講述: 在 flutter 跨平臺開發中,使用外掛 install_plugin_custom,實現在 Android 平臺調起自動安裝,在 ios 平臺跳轉 appstore中更新
flutter 跨平臺實際應用開發中,app的升級效果如下 ios 平臺:
Android 平臺:
1 引言
在APP開發方案中,一般我們會通過訪問我們的服務平臺來獲取 APP 的版本資訊,如版本號、版本名稱、是否強制更新等等
在這裡描述的是 在 Android 平臺下載 apk 然後再調起應用程式的安裝,在 ios 平臺點選更新跳轉 appstore 平臺。
在這裡下載 apk 使用的是 Dio ,安裝 apk 使用的是 install_plugin_custom 外掛,flutter 專案中的依賴
# 許可權申請
permission_handler: 4.0.0
# 網路請求
dio: ^2.1.2
# APP升級安裝元件 Android中呼叫自動安裝 apk的程式 ios 呼叫開啟APPStore
install_plugin_custom:
git:
url: https://github.com/zhaolongs/install_plugin_custom.git
ref: master
複製程式碼
2 flutter 中 Android 平臺的更新
2.1 SD 卡儲存許可權申請
Future<bool> _checkPermission(BuildContext context) async {
if (Theme.of(context).platform == TargetPlatform.android) {
PermissionStatus permission = await PermissionHandler()
.checkPermissionStatus(PermissionGroup.storage);
if (permission != PermissionStatus.granted) {
Map<PermissionGroup, PermissionStatus> permissions =
await PermissionHandler()
.requestPermissions([PermissionGroup.storage]);
if (permissions[PermissionGroup.storage] == PermissionStatus.granted) {
return true;
}
} else {
return true;
}
} else {
return true;
}
return false;
}
複製程式碼
2.2 SD 卡存儲存路徑獲取
Future<String> _findLocalPath(BuildContext context) async {
final directory = Theme.of(context).platform == TargetPlatform.android
? await getExternalStorageDirectory()
: await getApplicationDocumentsDirectory();
return directory.path;
}
複製程式碼
2.3 使用 Dio 下載 apk
//apk 網路儲存連結
String apkNetUrl ="";
//手機中sd卡上 apk 下載儲存路徑
String localPath ="";
Dio dio = Dio();
//設定連線超時時間
dio.options.connectTimeout = 1200000;
//設定資料接收超時時間
dio.options.receiveTimeout = 1200000;
try {
Response response = await dio
.download(apkNetUrl, localPath
onReceiveProgress: (int count, int total) {
// count 當前已下載檔案大小
// total 需要下載檔案的總大小
});
if (response.statusCode == 200) {
print('下載請求成功');
//"安裝";
} else {
//"下載失敗重試";
}
} catch (e) {
//"下載失敗重試";
if (mounted) {
setState(() {});
}
}
複製程式碼
2.4 使用 install_plugin_custom 安裝 apk
//apk 的包名
String apkPackageName ="";
// 安裝
InstallPluginCustom.installApk(
localPath,
apkPackageName)
.then((result) {
print('install apk $result');
}).catchError((error) {
// "重試";
installStatues = 2;
setState(() {});
});
複製程式碼
3 flutter 中 ios 平臺的更新
如果 flutter 專案是執行在 ios 手機中,那麼有更新資訊的時候,直接跳轉 appstore 中應用程式的頁面更新
if (Theme.of(context).platform == TargetPlatform.iOS) {
InstallPluginCustom.gotoAppStore(
"https://apps.apple.com/cn/app/id1472328992");
}
複製程式碼
在使用的時候直接替換這裡的跳轉的連結就好。