fix:修复 google 上架被拒问题:获取已安装应用列表,修复华为被拒问题:同意协议前获取设备信息

This commit is contained in:
anfe 2024-06-11 15:48:02 +08:00
parent 57a39ee3b6
commit 27ef3cdbb3
3 changed files with 156 additions and 119 deletions

View File

@ -1,115 +1,145 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.star_lock"> <manifest xmlns:android="http://schemas.android.com/apk/res/android"
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/> xmlns:tools="http://schemas.android.com/tools"
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/> package="com.example.star_lock">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />-->
<!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" />-->
<!--允许访问网络,必选权限-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--允许获取精确位置,精准定位必选-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--允许获取粗略位置,粗略定位必选-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!--允许获取设备和运营商信息用于问题排查和网络定位无gps情况下的定位若需网络定位功能则必选-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS"/>
<!--允许获取网络状态用于网络定位无gps情况下的定位若需网络定位功能则必选-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--允许获取wifi网络信息用于网络定位无gps情况下的定位若需网络定位功能则必选-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--允许获取wifi状态改变用于网络定位无gps情况下的定位若需网络定位功能则必选-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!--允许写设备缓存,用于问题排查-->
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<!--允许读设备日志,用于问题排查-->
<uses-permission android:name="android.permission.READ_LOGS" />
<!--相机--> <uses-permission
<uses-permission android:name="android.permission.CAMERA"/> android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />-->
<!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" />-->
<!--允许访问网络,必选权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许获取精确位置,精准定位必选-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--允许获取粗略位置,粗略定位必选-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--允许获取设备和运营商信息用于问题排查和网络定位无gps情况下的定位若需网络定位功能则必选-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<!--允许获取网络状态用于网络定位无gps情况下的定位若需网络定位功能则必选-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--允许获取wifi网络信息用于网络定位无gps情况下的定位若需网络定位功能则必选-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许获取wifi状态改变用于网络定位无gps情况下的定位若需网络定位功能则必选-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--允许写设备缓存,用于问题排查-->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!--允许读设备日志,用于问题排查-->
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <!--相机-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<!--允许麦克风权限,用于录音发送--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.REORDER_TASKS"/>
<!-- 相册权限 34适配 --> <!--允许麦克风权限,用于录音发送-->
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
<!-- 相册权限 34适配 -->
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
<application android:usesCleartextTraffic="true" android:label="@string/app_name" android:name="android.app.Application" android:icon="@mipmap/ic_launcher"> <!-- 移除 QUERY_ALL_PACKAGES 权限 -->
<meta-data <uses-permission
android:name="flutterEmbedding" android:name="android.permission.QUERY_ALL_PACKAGES"
android:value="2" /> tools:node="remove" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id" <application
android:value="1"/> <!-- 将您的通知渠道ID替换为您的实际ID --> android:name="android.app.Application"
<meta-data android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:usesCleartextTraffic="true">
<meta-data
android:name="flutterEmbedding"
android:value="2" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="1" /> <!-- 将您的通知渠道ID替换为您的实际ID -->
<meta-data
android:name="com.huawei.hms.client.appid" android:name="com.huawei.hms.client.appid"
android:value="110798531"/> android:value="110798531" />
<meta-data <meta-data
android:name="com.huawei.hms.client.cpid" android:name="com.huawei.hms.client.cpid"
android:value="1406555529261648640"/> android:value="1406555529261648640" />
<meta-data android:name="OPPO_APPKEY" <meta-data
android:value="OP-47f668c9943248118502aa58d066393b" /> android:name="OPPO_APPKEY"
android:value="OP-47f668c9943248118502aa58d066393b" />
<meta-data android:name="OPPO_APPID" <meta-data
android:name="OPPO_APPID"
android:value="OP-31726001" /> android:value="OP-31726001" />
<meta-data android:name="OPPO_APPSECRET" <meta-data
android:name="OPPO_APPSECRET"
android:value="OP-05723986bba64183a71530b496922450" /> android:value="OP-05723986bba64183a71530b496922450" />
<!-- 配置定位Service --> <!-- 配置定位Service -->
<service android:name="com.amap.api.location.APSService"/> <service android:name="com.amap.api.location.APSService" />
<!-- since JPushv3.6.8 oppov2.1.0 oppo 核心功能--> <!-- since JPushv3.6.8 oppov2.1.0 oppo 核心功能-->
<service android:name="cn.jpush.android.service.PluginOppoPushService" <service
android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE" android:name="cn.jpush.android.service.PluginOppoPushService"
android:exported="true"> android:exported="true"
<intent-filter> android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE">
<action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE" /> <intent-filter>
</intent-filter> <action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE" />
</service> </intent-filter>
</service>
<!-- since JPushv3.6.8 oppov2.1.0 oppo 核心功能--> <!-- since JPushv3.6.8 oppov2.1.0 oppo 核心功能-->
<service <service
android:name="com.heytap.msp.push.service.DataMessageCallbackService" android:name="com.heytap.msp.push.service.DataMessageCallbackService"
android:permission="com.heytap.mcs.permission.SEND_PUSH_MESSAGE" android:exported="true"
android:exported="true"> android:permission="com.heytap.mcs.permission.SEND_PUSH_MESSAGE">
<intent-filter> <intent-filter>
<action android:name="com.heytap.mcs.action.RECEIVE_MCS_MESSAGE"/> <action android:name="com.heytap.mcs.action.RECEIVE_MCS_MESSAGE" />
<action android:name="com.heytap.msp.push.RECEIVE_MCS_MESSAGE"/> <action android:name="com.heytap.msp.push.RECEIVE_MCS_MESSAGE" />
</intent-filter> </intent-filter>
</service> <!--兼容Q版本--> </service> <!--兼容Q版本-->
<activity android:name="com.skychip.lock.MainActivity" android:exported="true" android:screenOrientation="portrait" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <activity
<!-- Specifies an Android theme to apply to this Activity as soon as android:name="com.skychip.lock.MainActivity"
the Android process has started. This theme is visible to the user android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
while the Flutter UI initializes. After that, this theme continues android:exported="true"
to determine the Window background behind the Flutter UI. --> android:hardwareAccelerated="true"
<meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme"/> android:launchMode="singleTop"
<intent-filter> android:screenOrientation="portrait"
<action android:name="android.intent.action.MAIN"/> android:theme="@style/LaunchTheme"
<category android:name="android.intent.category.LAUNCHER"/> android:windowSoftInputMode="adjustResize">
</intent-filter> <!-- Specifies an Android theme to apply to this Activity as soon as
<intent-filter> the Android process has started. This theme is visible to the user
<action android:name="android.intent.action.VIEW" /> while the Flutter UI initializes. After that, this theme continues
<category android:name="android.intent.category.DEFAULT" /> to determine the Window background behind the Flutter UI. -->
<category android:name="android.intent.category.BROWSABLE" /> <meta-data
<data android:scheme="skysmartlock" /> android:name="io.flutter.embedding.android.NormalTheme"
</intent-filter> android:resource="@style/NormalTheme" />
</activity> <intent-filter>
</application> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="skysmartlock" />
</intent-filter>
</activity>
</application>
</manifest> </manifest>

View File

@ -102,15 +102,14 @@ class StarLockLoginLogic extends BaseGetXController {
super.onClose(); super.onClose();
} }
@override //
void onReady() { void flushedDeviceInfo(){
super.onReady();
XSConstantMacro().getDeviceInfoData().then((Map<String, dynamic> data) { XSConstantMacro().getDeviceInfoData().then((Map<String, dynamic> data) {
state.deviceInfoMap.value = data; state.deviceInfoMap.value = data;
}).catchError((error) { }).catchError((dynamic error) {
// //
AppLog.log('获取设备信息时出错: $error'); AppLog.log('获取设备信息时出错: $error');
}); });
} }
} }

View File

@ -10,6 +10,7 @@ import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/app_get_version.dart'; import 'package:star_lock/login/login/app_get_version.dart';
import 'package:star_lock/login/login/starLock_login_logic.dart';
import 'package:star_lock/main.dart'; import 'package:star_lock/main.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/customer_tool.dart';
@ -30,6 +31,9 @@ class AppFirstEnterHandle {
} }
getAppInfo(); getAppInfo();
await privacySDKInitialization(); await privacySDKInitialization();
if (Get.isRegistered<StarLockLoginLogic>()) {
Get.find<StarLockLoginLogic>().flushedDeviceInfo();
}
break; break;
case isAgreePosition: // case isAgreePosition: //
if (getFlag != isAgreePosition) { if (getFlag != isAgreePosition) {
@ -87,10 +91,11 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
// //
Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{ Get.toNamed(Routers.webviewShowPage,
"url": XSConstantMacro.userAgreementURL, arguments: <String, String>{
"title": '用户协议'.tr "url": XSConstantMacro.userAgreementURL,
}); "title": '用户协议'.tr
});
}, },
), ),
TextSpan(text: ''.tr), TextSpan(text: ''.tr),
@ -101,10 +106,11 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
// //
Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{ Get.toNamed(Routers.webviewShowPage,
"url": XSConstantMacro.privacyPolicyURL, arguments: <String, String>{
"title": '隐私政策'.tr "url": XSConstantMacro.privacyPolicyURL,
}); "title": '隐私政策'.tr
});
}, },
), ),
TextSpan( TextSpan(
@ -154,10 +160,11 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
// //
Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{ Get.toNamed(Routers.webviewShowPage,
"url": XSConstantMacro.userAgreementURL, arguments: <String, String>{
"title": '用户协议'.tr "url": XSConstantMacro.userAgreementURL,
}); "title": '用户协议'.tr
});
}, },
), ),
TextSpan(text: ''.tr), TextSpan(text: ''.tr),
@ -169,10 +176,11 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
// //
Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{ Get.toNamed(Routers.webviewShowPage,
"url": XSConstantMacro.privacyPolicyURL, arguments: <String, String>{
"title": '隐私政策'.tr "url": XSConstantMacro.privacyPolicyURL,
}); "title": '隐私政策'.tr
});
}, },
), ),
TextSpan( TextSpan(