Commit 2c0795464703ea3c632f3e3504b5f9761070cbce
1 parent
69a01aa2
feat:应用内更新接口替换
Showing
12 changed files
with
174 additions
and
116 deletions
lib/common/core/app_config_helper.dart
... | ... | @@ -17,6 +17,9 @@ class AppConfigHelper { |
17 | 17 | |
18 | 18 | static String _versionCode = ''; |
19 | 19 | |
20 | + // 是否检测过更新,因为路由混乱导致首页会多次启动,避免重复检测更新,先临时处理 | |
21 | + static bool checkedUpdate = false; | |
22 | + | |
20 | 23 | // 获取用户信息 |
21 | 24 | static Future<AppConfigEntity?> getAppConfig() async { |
22 | 25 | if (configEntityEntity != null) { | ... | ... |
lib/common/request/apis.dart
... | ... | @@ -6,6 +6,9 @@ class Apis { |
6 | 6 | /// 接口地址:https://app.apifox.com/link/project/2684751/apis/api-89897678 |
7 | 7 | static const String appConfig = 'system/app/config'; |
8 | 8 | |
9 | + /// app版本信息 | |
10 | + static const String appVersion = 'system/app/version'; | |
11 | + | |
9 | 12 | /// 登录 |
10 | 13 | static const String login = 'login'; |
11 | 14 | ... | ... |
lib/common/request/dao/system_dao.dart
1 | 1 | import '../../../models/app_config_entity.dart'; |
2 | +import '../../../models/app_version_entity.dart'; | |
2 | 3 | import '../request_client.dart'; |
3 | 4 | |
4 | 5 | class SystemDao { |
... | ... | @@ -7,4 +8,9 @@ class SystemDao { |
7 | 8 | static Future<AppConfigEntity?> getAppConfig() async { |
8 | 9 | return await requestClient.get(Apis.appConfig); |
9 | 10 | } |
11 | + | |
12 | + // 获取app版本信息 | |
13 | + static Future<AppVersionEntity?> getVersionInfo() async { | |
14 | + return await requestClient.get(Apis.appVersion); | |
15 | + } | |
10 | 16 | } | ... | ... |
lib/common/request/token_interceptor.dart
1 | 1 | import 'package:dio/dio.dart'; |
2 | +import 'package:flutter/foundation.dart'; | |
2 | 3 | import 'package:wow_english/common/core/user_util.dart'; |
3 | 4 | |
4 | 5 | import '../core/app_config_helper.dart'; |
... | ... | @@ -13,6 +14,7 @@ class TokenInterceptor extends Interceptor { |
13 | 14 | // 在发送请求之前获取版本号 |
14 | 15 | String version = await AppConfigHelper.getAppVersion(); |
15 | 16 | options.headers["version"] = version; |
17 | + options.headers["User-Agent"] = defaultTargetPlatform == TargetPlatform.iOS ? "ios" : "android"; | |
16 | 18 | super.onRequest(options, handler); |
17 | 19 | } |
18 | 20 | } | ... | ... |
lib/generated/json/app_config_entity.g.dart
... | ... | @@ -3,49 +3,6 @@ import 'package:wow_english/models/app_config_entity.dart'; |
3 | 3 | |
4 | 4 | AppConfigEntity $AppConfigEntityFromJson(Map<String, dynamic> json) { |
5 | 5 | final AppConfigEntity appConfigEntity = AppConfigEntity(); |
6 | - final bool? androidForceUpdate = jsonConvert.convert<bool>( | |
7 | - json['androidForceUpdate']); | |
8 | - if (androidForceUpdate != null) { | |
9 | - appConfigEntity.androidForceUpdate = androidForceUpdate; | |
10 | - } | |
11 | - final bool? androidRecommendUpdate = jsonConvert.convert<bool>( | |
12 | - json['androidRecommendUpdate']); | |
13 | - if (androidRecommendUpdate != null) { | |
14 | - appConfigEntity.androidRecommendUpdate = androidRecommendUpdate; | |
15 | - } | |
16 | - final String? androidUpdatePackageUrl = jsonConvert.convert<String>( | |
17 | - json['androidUpdatePackageUrl']); | |
18 | - if (androidUpdatePackageUrl != null) { | |
19 | - appConfigEntity.androidUpdatePackageUrl = androidUpdatePackageUrl; | |
20 | - } | |
21 | - final int? androidVersion = jsonConvert.convert<int>(json['androidVersion']); | |
22 | - if (androidVersion != null) { | |
23 | - appConfigEntity.androidVersion = androidVersion; | |
24 | - } | |
25 | - final bool? iosForceUpdate = jsonConvert.convert<bool>( | |
26 | - json['iosForceUpdate']); | |
27 | - if (iosForceUpdate != null) { | |
28 | - appConfigEntity.iosForceUpdate = iosForceUpdate; | |
29 | - } | |
30 | - final bool? iosRecommendUpdate = jsonConvert.convert<bool>( | |
31 | - json['iosRecommendUpdate']); | |
32 | - if (iosRecommendUpdate != null) { | |
33 | - appConfigEntity.iosRecommendUpdate = iosRecommendUpdate; | |
34 | - } | |
35 | - final int? iosVersion = jsonConvert.convert<int>(json['iosVersion']); | |
36 | - if (iosVersion != null) { | |
37 | - appConfigEntity.iosVersion = iosVersion; | |
38 | - } | |
39 | - final String? updatePackageDescription = jsonConvert.convert<String>( | |
40 | - json['updatePackageDescription']); | |
41 | - if (updatePackageDescription != null) { | |
42 | - appConfigEntity.updatePackageDescription = updatePackageDescription; | |
43 | - } | |
44 | - final String? noticeBeforePurchaseUrl = jsonConvert.convert<String>( | |
45 | - json['noticeBeforePurchaseUrl']); | |
46 | - if (noticeBeforePurchaseUrl != null) { | |
47 | - appConfigEntity.noticeBeforePurchaseUrl = noticeBeforePurchaseUrl; | |
48 | - } | |
49 | 6 | final String? safe = jsonConvert.convert<String>(json['safe']); |
50 | 7 | if (safe != null) { |
51 | 8 | appConfigEntity.safe = safe; |
... | ... | @@ -55,46 +12,15 @@ AppConfigEntity $AppConfigEntityFromJson(Map<String, dynamic> json) { |
55 | 12 | |
56 | 13 | Map<String, dynamic> $AppConfigEntityToJson(AppConfigEntity entity) { |
57 | 14 | final Map<String, dynamic> data = <String, dynamic>{}; |
58 | - data['androidForceUpdate'] = entity.androidForceUpdate; | |
59 | - data['androidRecommendUpdate'] = entity.androidRecommendUpdate; | |
60 | - data['androidUpdatePackageUrl'] = entity.androidUpdatePackageUrl; | |
61 | - data['androidVersion'] = entity.androidVersion; | |
62 | - data['iosForceUpdate'] = entity.iosForceUpdate; | |
63 | - data['iosRecommendUpdate'] = entity.iosRecommendUpdate; | |
64 | - data['iosVersion'] = entity.iosVersion; | |
65 | - data['updatePackageDescription'] = entity.updatePackageDescription; | |
66 | - data['noticeBeforePurchaseUrl'] = entity.noticeBeforePurchaseUrl; | |
67 | 15 | data['safe'] = entity.safe; |
68 | 16 | return data; |
69 | 17 | } |
70 | 18 | |
71 | 19 | extension AppConfigEntityExtension on AppConfigEntity { |
72 | 20 | AppConfigEntity copyWith({ |
73 | - bool? androidForceUpdate, | |
74 | - bool? androidRecommendUpdate, | |
75 | - String? androidUpdatePackageUrl, | |
76 | - int? androidVersion, | |
77 | - bool? iosForceUpdate, | |
78 | - bool? iosRecommendUpdate, | |
79 | - int? iosVersion, | |
80 | - String? updatePackageDescription, | |
81 | - String? noticeBeforePurchaseUrl, | |
82 | 21 | String? safe, |
83 | 22 | }) { |
84 | 23 | return AppConfigEntity() |
85 | - ..androidForceUpdate = androidForceUpdate ?? this.androidForceUpdate | |
86 | - ..androidRecommendUpdate = androidRecommendUpdate ?? | |
87 | - this.androidRecommendUpdate | |
88 | - ..androidUpdatePackageUrl = androidUpdatePackageUrl ?? | |
89 | - this.androidUpdatePackageUrl | |
90 | - ..androidVersion = androidVersion ?? this.androidVersion | |
91 | - ..iosForceUpdate = iosForceUpdate ?? this.iosForceUpdate | |
92 | - ..iosRecommendUpdate = iosRecommendUpdate ?? this.iosRecommendUpdate | |
93 | - ..iosVersion = iosVersion ?? this.iosVersion | |
94 | - ..updatePackageDescription = updatePackageDescription ?? | |
95 | - this.updatePackageDescription | |
96 | - ..noticeBeforePurchaseUrl = noticeBeforePurchaseUrl ?? | |
97 | - this.noticeBeforePurchaseUrl | |
98 | 24 | ..safe = safe ?? this.safe; |
99 | 25 | } |
100 | 26 | } |
101 | 27 | \ No newline at end of file | ... | ... |
lib/generated/json/app_version_entity.g.dart
0 → 100644
1 | +import 'package:wow_english/generated/json/base/json_convert_content.dart'; | |
2 | +import 'package:wow_english/models/app_version_entity.dart'; | |
3 | + | |
4 | +AppVersionEntity $AppVersionEntityFromJson(Map<String, dynamic> json) { | |
5 | + final AppVersionEntity appVersionEntity = AppVersionEntity(); | |
6 | + final String? packageUrl = jsonConvert.convert<String>(json['packageUrl']); | |
7 | + if (packageUrl != null) { | |
8 | + appVersionEntity.packageUrl = packageUrl; | |
9 | + } | |
10 | + final String? packageName = jsonConvert.convert<String>(json['packageName']); | |
11 | + if (packageName != null) { | |
12 | + appVersionEntity.packageName = packageName; | |
13 | + } | |
14 | + final String? packageSize = jsonConvert.convert<String>(json['packageSize']); | |
15 | + if (packageSize != null) { | |
16 | + appVersionEntity.packageSize = packageSize; | |
17 | + } | |
18 | + final String? platformType = jsonConvert.convert<String>( | |
19 | + json['platformType']); | |
20 | + if (platformType != null) { | |
21 | + appVersionEntity.platformType = platformType; | |
22 | + } | |
23 | + final String? remark = jsonConvert.convert<String>(json['remark']); | |
24 | + if (remark != null) { | |
25 | + appVersionEntity.remark = remark; | |
26 | + } | |
27 | + final String? status = jsonConvert.convert<String>(json['status']); | |
28 | + if (status != null) { | |
29 | + appVersionEntity.status = status; | |
30 | + } | |
31 | + final String? version = jsonConvert.convert<String>(json['version']); | |
32 | + if (version != null) { | |
33 | + appVersionEntity.version = version; | |
34 | + } | |
35 | + final String? volType = jsonConvert.convert<String>(json['volType']); | |
36 | + if (volType != null) { | |
37 | + appVersionEntity.volType = volType; | |
38 | + } | |
39 | + return appVersionEntity; | |
40 | +} | |
41 | + | |
42 | +Map<String, dynamic> $AppVersionEntityToJson(AppVersionEntity entity) { | |
43 | + final Map<String, dynamic> data = <String, dynamic>{}; | |
44 | + data['packageUrl'] = entity.packageUrl; | |
45 | + data['packageName'] = entity.packageName; | |
46 | + data['packageSize'] = entity.packageSize; | |
47 | + data['platformType'] = entity.platformType; | |
48 | + data['remark'] = entity.remark; | |
49 | + data['status'] = entity.status; | |
50 | + data['version'] = entity.version; | |
51 | + data['volType'] = entity.volType; | |
52 | + return data; | |
53 | +} | |
54 | + | |
55 | +extension AppVersionEntityExtension on AppVersionEntity { | |
56 | + AppVersionEntity copyWith({ | |
57 | + String? packageUrl, | |
58 | + String? packageName, | |
59 | + String? packageSize, | |
60 | + String? platformType, | |
61 | + String? remark, | |
62 | + String? status, | |
63 | + String? version, | |
64 | + String? volType, | |
65 | + }) { | |
66 | + return AppVersionEntity() | |
67 | + ..packageUrl = packageUrl ?? this.packageUrl | |
68 | + ..packageName = packageName ?? this.packageName | |
69 | + ..packageSize = packageSize ?? this.packageSize | |
70 | + ..platformType = platformType ?? this.platformType | |
71 | + ..remark = remark ?? this.remark | |
72 | + ..status = status ?? this.status | |
73 | + ..version = version ?? this.version | |
74 | + ..volType = volType ?? this.volType; | |
75 | + } | |
76 | +} | |
0 | 77 | \ No newline at end of file | ... | ... |
lib/generated/json/base/json_convert_content.dart
... | ... | @@ -6,6 +6,7 @@ |
6 | 6 | import 'package:flutter/material.dart' show debugPrint; |
7 | 7 | import 'package:wow_english/models/aliyun_oss_upload_sts_entity.dart'; |
8 | 8 | import 'package:wow_english/models/app_config_entity.dart'; |
9 | +import 'package:wow_english/models/app_version_entity.dart'; | |
9 | 10 | import 'package:wow_english/models/course_entity.dart'; |
10 | 11 | import 'package:wow_english/models/course_module_entity.dart'; |
11 | 12 | import 'package:wow_english/models/course_process_entity.dart'; |
... | ... | @@ -160,6 +161,10 @@ class JsonConvert { |
160 | 161 | return data.map<AppConfigEntity>((Map<String, dynamic> e) => |
161 | 162 | AppConfigEntity.fromJson(e)).toList() as M; |
162 | 163 | } |
164 | + if (<AppVersionEntity>[] is M) { | |
165 | + return data.map<AppVersionEntity>((Map<String, dynamic> e) => | |
166 | + AppVersionEntity.fromJson(e)).toList() as M; | |
167 | + } | |
163 | 168 | if (<CourseEntity>[] is M) { |
164 | 169 | return data.map<CourseEntity>((Map<String, dynamic> e) => |
165 | 170 | CourseEntity.fromJson(e)).toList() as M; |
... | ... | @@ -246,6 +251,7 @@ class JsonConvertClassCollection { |
246 | 251 | (AliyunOssUploadStsCallbackParam) |
247 | 252 | .toString(): AliyunOssUploadStsCallbackParam.fromJson, |
248 | 253 | (AppConfigEntity).toString(): AppConfigEntity.fromJson, |
254 | + (AppVersionEntity).toString(): AppVersionEntity.fromJson, | |
249 | 255 | (CourseEntity).toString(): CourseEntity.fromJson, |
250 | 256 | (CourseCourseLessons).toString(): CourseCourseLessons.fromJson, |
251 | 257 | (CourseModuleEntity).toString(): CourseModuleEntity.fromJson, | ... | ... |
lib/models/app_config_entity.dart
... | ... | @@ -7,31 +7,6 @@ import '../generated/json/app_config_entity.g.dart'; |
7 | 7 | @JsonSerializable() |
8 | 8 | class AppConfigEntity { |
9 | 9 | |
10 | - // 安卓是否强制更新 | |
11 | - bool? androidForceUpdate; | |
12 | - | |
13 | - // 安卓是否推荐更新 | |
14 | - bool? androidRecommendUpdate; | |
15 | - | |
16 | - // 安卓更新包地址 | |
17 | - String? androidUpdatePackageUrl; | |
18 | - | |
19 | - // 安卓当前版本号 | |
20 | - int? androidVersion; | |
21 | - | |
22 | - bool? iosForceUpdate; | |
23 | - | |
24 | - bool? iosRecommendUpdate; | |
25 | - | |
26 | - // ios版本 | |
27 | - int? iosVersion; | |
28 | - | |
29 | - // 更新说明 | |
30 | - String? updatePackageDescription; | |
31 | - | |
32 | - // 购前须知图片 | |
33 | - String? noticeBeforePurchaseUrl; | |
34 | - | |
35 | 10 | // 当前是否安全,safe-安全 otherwise-隐藏pay |
36 | 11 | String? safe; |
37 | 12 | ... | ... |
lib/models/app_version_entity.dart
0 → 100644
1 | +import 'package:wow_english/generated/json/base/json_field.dart'; | |
2 | +import 'package:wow_english/generated/json/app_version_entity.g.dart'; | |
3 | +import 'dart:convert'; | |
4 | +export 'package:wow_english/generated/json/app_version_entity.g.dart'; | |
5 | + | |
6 | +@JsonSerializable() | |
7 | +class AppVersionEntity { | |
8 | + | |
9 | + // 更新包地址 | |
10 | + String? packageUrl; | |
11 | + | |
12 | + // 更新包名 | |
13 | + String? packageName; | |
14 | + | |
15 | + // 更新包大小 | |
16 | + String? packageSize; | |
17 | + | |
18 | + // 平台类型 | |
19 | + String? platformType; | |
20 | + | |
21 | + // 更新说明 | |
22 | + String? remark; | |
23 | + | |
24 | + // 状态 | |
25 | + String? status; | |
26 | + | |
27 | + // app版本号 | |
28 | + String? version; | |
29 | + | |
30 | + // 强更类型 | |
31 | + String? volType; | |
32 | + | |
33 | + | |
34 | + AppVersionEntity(); | |
35 | + | |
36 | + factory AppVersionEntity.fromJson(Map<String, dynamic> json) => $AppVersionEntityFromJson(json); | |
37 | + | |
38 | + Map<String, dynamic> toJson() => $AppVersionEntityToJson(this); | |
39 | + | |
40 | + @override | |
41 | + String toString() { | |
42 | + return jsonEncode(this); | |
43 | + } | |
44 | +} | |
45 | + | |
46 | +enum UpdateStrategy { | |
47 | + SUGGEST("suggest", "建议更新"), | |
48 | + FORCE("force", "强制更新"); | |
49 | + | |
50 | + const UpdateStrategy(this.name, this.chineseName); | |
51 | + | |
52 | + final String name; | |
53 | + | |
54 | + final String chineseName; | |
55 | +} | |
0 | 56 | \ No newline at end of file | ... | ... |
lib/pages/moduleSelect/bloc.dart
... | ... | @@ -4,6 +4,9 @@ import 'package:flutter/foundation.dart'; |
4 | 4 | import 'package:wow_english/models/app_config_entity.dart'; |
5 | 5 | |
6 | 6 | import '../../common/core/app_config_helper.dart'; |
7 | +import '../../common/request/dao/system_dao.dart'; | |
8 | +import '../../models/app_version_entity.dart'; | |
9 | +import '../../utils/log_util.dart'; | |
7 | 10 | import 'event.dart'; |
8 | 11 | import 'state.dart'; |
9 | 12 | |
... | ... | @@ -18,23 +21,25 @@ class ModuleSelectBloc extends Bloc<ModuleSelectEvent, ModuleSelectState> { |
18 | 21 | } |
19 | 22 | |
20 | 23 | Future<void> _checkUpdate(Emitter<ModuleSelectState> emit) async { |
24 | + if (AppConfigHelper.checkedUpdate) { | |
25 | + return; | |
26 | + } | |
21 | 27 | int localVersion = int.parse(await AppConfigHelper.getAppVersion()); |
22 | - AppConfigEntity? appConfigEntity = await AppConfigHelper.getAppConfig(); | |
23 | - if (appConfigEntity == null) { | |
28 | + AppVersionEntity? appVersionEntity = await SystemDao.getVersionInfo(); | |
29 | + AppConfigHelper.checkedUpdate = true; | |
30 | + if (appVersionEntity == null) { | |
24 | 31 | return; |
25 | 32 | } |
33 | + Log.d("WQF _checkUpdate appVersionEntity: $appVersionEntity localVersion=$localVersion"); | |
26 | 34 | if (defaultTargetPlatform == TargetPlatform.iOS) { |
27 | - if (localVersion < (appConfigEntity.iosVersion ?? 0) && | |
28 | - appConfigEntity.iosRecommendUpdate == true) { | |
35 | + if (localVersion < int.parse(appVersionEntity.version ?? '0')) { | |
29 | 36 | emit(UpdateDialogState( |
30 | - appConfigEntity.iosForceUpdate ?? false, appConfigEntity)); | |
37 | + appVersionEntity.volType == UpdateStrategy.FORCE.name, appVersionEntity)); | |
31 | 38 | } |
32 | 39 | } else { |
33 | - if (localVersion < (appConfigEntity.androidVersion ?? 0) && | |
34 | - appConfigEntity.androidRecommendUpdate == true) { | |
40 | + if (localVersion < int.parse(appVersionEntity.version ?? '0')) { | |
35 | 41 | emit(UpdateDialogState( |
36 | - appConfigEntity.androidForceUpdate ?? false, appConfigEntity, | |
37 | - )); | |
42 | + appVersionEntity.volType == UpdateStrategy.FORCE.name, appVersionEntity)); | |
38 | 43 | } |
39 | 44 | } |
40 | 45 | } | ... | ... |
lib/pages/moduleSelect/state.dart
1 | -import '../../models/app_config_entity.dart'; | |
1 | +import 'package:wow_english/models/app_version_entity.dart'; | |
2 | 2 | |
3 | 3 | class ModuleSelectState { |
4 | 4 | ModuleSelectState init() { |
... | ... | @@ -12,9 +12,9 @@ class ModuleSelectState { |
12 | 12 | |
13 | 13 | class UpdateDialogState extends ModuleSelectState { |
14 | 14 | |
15 | - final AppConfigEntity appConfigEntity; | |
15 | + final AppVersionEntity appVersionEntity; | |
16 | 16 | |
17 | 17 | final bool forceUpdate; |
18 | 18 | |
19 | - UpdateDialogState(this.forceUpdate, this.appConfigEntity); | |
19 | + UpdateDialogState(this.forceUpdate, this.appVersionEntity); | |
20 | 20 | } | ... | ... |
lib/pages/moduleSelect/view.dart
... | ... | @@ -8,13 +8,14 @@ import 'package:flutter_bloc/flutter_bloc.dart'; |
8 | 8 | import 'package:url_launcher/url_launcher.dart'; |
9 | 9 | import 'package:wow_english/common/core/app_config_helper.dart'; |
10 | 10 | import 'package:wow_english/common/extension/string_extension.dart'; |
11 | +import 'package:wow_english/models/app_version_entity.dart'; | |
11 | 12 | import 'package:wow_english/pages/moduleSelect/state.dart'; |
12 | 13 | import 'package:wow_english/pages/moduleSelect/widgets/BaseHomeHeaderWidget.dart'; |
13 | 14 | import 'package:wow_english/pages/user/bloc/user_bloc.dart'; |
14 | 15 | |
15 | 16 | import '../../common/core/user_util.dart'; |
16 | 17 | import '../../common/dialogs/show_dialog.dart'; |
17 | -import '../../models/app_config_entity.dart'; | |
18 | +import '../../utils/log_util.dart'; | |
18 | 19 | import 'bloc.dart'; |
19 | 20 | import 'event.dart'; |
20 | 21 | import 'package:flutter_screenutil/flutter_screenutil.dart'; |
... | ... | @@ -44,7 +45,7 @@ class _HomePageView extends StatelessWidget { |
44 | 45 | BlocListener<ModuleSelectBloc, ModuleSelectState>( |
45 | 46 | listener: (context, state) { |
46 | 47 | if (state is UpdateDialogState) { |
47 | - _showUpdateDialog(context, state.forceUpdate, state.appConfigEntity); | |
48 | + _showUpdateDialog(context, state.forceUpdate, state.appVersionEntity); | |
48 | 49 | } |
49 | 50 | }, |
50 | 51 | ), |
... | ... | @@ -169,7 +170,7 @@ class _HomePageView extends StatelessWidget { |
169 | 170 | ///Flutter侧处理升级对话框 |
170 | 171 | ///[forcedUpgrade] 是否强制升级 |
171 | 172 | _showUpdateDialog(BuildContext context, bool forcedUpgrade, |
172 | - AppConfigEntity appConfigEntity) { | |
173 | + AppVersionEntity appVersionEntity) { | |
173 | 174 | showDialog( |
174 | 175 | context: context, |
175 | 176 | // 当我们点击除开对话框内容以外的区域是否关闭对话需用用到barrierDismissible参数 . 这个参数默认值是true ,但不能为null . |
... | ... | @@ -180,7 +181,7 @@ class _HomePageView extends StatelessWidget { |
180 | 181 | child: AlertDialog( |
181 | 182 | title: const Text('发现新版本'), |
182 | 183 | content: Text( |
183 | - appConfigEntity.updatePackageDescription ?? | |
184 | + appVersionEntity.remark ?? | |
184 | 185 | '修复了一些已知问题'), |
185 | 186 | actions: <Widget>[ |
186 | 187 | TextButton( |
... | ... | @@ -202,7 +203,7 @@ class _HomePageView extends StatelessWidget { |
202 | 203 | _launchAppStore("6450870731"); |
203 | 204 | return; |
204 | 205 | } |
205 | - final String? apkUrl = appConfigEntity.androidUpdatePackageUrl; | |
206 | + final String? apkUrl = appVersionEntity.packageUrl; | |
206 | 207 | if (apkUrl == null || apkUrl.isEmpty) { |
207 | 208 | return; |
208 | 209 | } | ... | ... |