修改权限申请文案

This commit is contained in:
Fson 2024-08-19 13:53:06 +08:00
parent 4072fe7c8d
commit 4092c0b235
7 changed files with 226 additions and 221 deletions

View File

@ -399,7 +399,7 @@
CODE_SIGN_IDENTITY = "Apple Distribution"; CODE_SIGN_IDENTITY = "Apple Distribution";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 6; CURRENT_PROJECT_VERSION = 8;
DART_OBFUSCATION = true; DART_OBFUSCATION = true;
DEVELOPMENT_TEAM = TW3K3253KL; DEVELOPMENT_TEAM = TW3K3253KL;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = TW3K3253KL; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = TW3K3253KL;
@ -545,7 +545,7 @@
CODE_SIGN_IDENTITY = "Apple Distribution"; CODE_SIGN_IDENTITY = "Apple Distribution";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 6; CURRENT_PROJECT_VERSION = 8;
DART_OBFUSCATION = true; DART_OBFUSCATION = true;
DEVELOPMENT_TEAM = TW3K3253KL; DEVELOPMENT_TEAM = TW3K3253KL;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = TW3K3253KL; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = TW3K3253KL;
@ -581,7 +581,7 @@
CODE_SIGN_IDENTITY = "Apple Distribution"; CODE_SIGN_IDENTITY = "Apple Distribution";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 6; CURRENT_PROJECT_VERSION = 8;
DART_OBFUSCATION = true; DART_OBFUSCATION = true;
DEVELOPMENT_TEAM = TW3K3253KL; DEVELOPMENT_TEAM = TW3K3253KL;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = TW3K3253KL; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = TW3K3253KL;

View File

@ -32,11 +32,11 @@
<true/> <true/>
</dict> </dict>
<key>NSCameraUsageDescription</key> <key>NSCameraUsageDescription</key>
<string>TThis enables you to take and upload photos to your private space. Please grant camera access.</string> <string>Visual Wallpaper needs access to your camera to take photos for creating custom wallpapers. The photos you take will only be used to make personalized wallpapers within the app.</string>
<key>NSPhotoLibraryAddUsageDescription</key> <key>NSPhotoLibraryAddUsageDescription</key>
<string>We need access to your photo album so you can save wallpapers from the app to your album.</string> <string>We need access to your photo album so you can save wallpapers from the app to your album.</string>
<key>NSPhotoLibraryUsageDescription</key> <key>NSPhotoLibraryUsageDescription</key>
<string>This enables you to upload photos and save wallpapers. Please grant photo library access.</string> <string>This enables you to upload photos and save wallpapers.</string>
<key>NSUserTrackingUsageDescription</key> <key>NSUserTrackingUsageDescription</key>
<string>We need your permission to access the advertising identifier to provide better ad services.</string> <string>We need your permission to access the advertising identifier to provide better ad services.</string>
<key>CFBundleURLTypes</key> <key>CFBundleURLTypes</key>

View File

@ -58,9 +58,10 @@ class _PinCodeVerificationScreenState extends State<PinCodeVerificationScreen> {
backgroundColor: Colors.black, backgroundColor: Colors.black,
key: scaffoldKey, key: scaffoldKey,
body: SafeArea( body: SafeArea(
child: SingleChildScrollView(
child: Container( child: Container(
margin: EdgeInsets.only(top: 94.w), margin: EdgeInsets.only(top: 94.h),
height: MediaQuery.of(context).size.height, height: MediaQuery.of(context).size.height - MediaQuery.of(context).padding.top - kBottomNavigationBarHeight - 94.h,
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
child: Column( child: Column(
children: [ children: [
@ -250,6 +251,7 @@ class _PinCodeVerificationScreenState extends State<PinCodeVerificationScreen> {
), ),
), ),
), ),
),
); );
} }
} }

View File

@ -1,11 +1,18 @@
// Author: fengshengxiong
// Date: 2024/5/10
// Description:
import 'dart:io';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:wallpaperx/common/components/dialog/remind_dialog.dart'; import 'package:wallpaperx/common/components/dialog/remind_dialog.dart';
import 'package:wallpaperx/global/app_config.dart';
class PermissionUtil { class PermissionUtil {
/// ///
/// [permissionList] /// [permissionList]
static Future<bool> checkPermission(List<Permission> permissionList) async { static Future<bool> checkPermission(List<Permission> permissionList, {bool showDialog = true}) async {
// //
List<Permission> newPermissionList = []; List<Permission> newPermissionList = [];
// //
@ -23,17 +30,17 @@ class PermissionUtil {
switch (permissionStatus) { switch (permissionStatus) {
// //
case PermissionStatus.denied: case PermissionStatus.denied:
showFailedDialog(newPermissionList); if (showDialog) _showFailedDialog(newPermissionList);
return false; return false;
// //
case PermissionStatus.granted: case PermissionStatus.granted:
case PermissionStatus.limited: case PermissionStatus.limited:
case PermissionStatus.provisional:
return true; return true;
// //
case PermissionStatus.provisional:
case PermissionStatus.restricted: case PermissionStatus.restricted:
case PermissionStatus.permanentlyDenied: case PermissionStatus.permanentlyDenied:
showFailedDialog(newPermissionList, isPermanentlyDenied: true); if (showDialog) _showFailedDialog(newPermissionList, isPermanentlyDenied: true);
break; break;
} }
} else { } else {
@ -55,58 +62,53 @@ class PermissionUtil {
return currentPermissionStatus; return currentPermissionStatus;
} }
///
static Future<bool> checkLocationAlways() async { static Future<bool> checkLocationAlways() async {
// //
// Android没有这一步 ios会先访问这个再访问其他的 // Android没有这一步 ios会先访问这个再访问其他的
PermissionStatus status = PermissionStatus.granted; PermissionStatus status1 = PermissionStatus.granted;
status = await _checkSinglePermission(Permission.locationWhenInUse); status1 = await _checkSinglePermission(Permission.locationWhenInUse);
// //
PermissionStatus status2 = PermissionStatus.denied; PermissionStatus status2 = PermissionStatus.denied;
// //
if (status.isGranted) { if (status1.isGranted) {
status2 = await _checkSinglePermission(Permission.locationAlways); status2 = await _checkSinglePermission(Permission.locationAlways);
} }
// //
if (status.isGranted && status2.isGranted) { if (status1.isGranted && status2.isGranted) {
return true; return true;
//
} else if (status.isDenied || status2.isDenied) {
showFailedDialog(
[Permission.locationWhenInUse, Permission.locationAlways]);
} else { } else {
showFailedDialog( //
[Permission.locationWhenInUse, Permission.locationAlways], _showFailedDialog([Permission.locationWhenInUse, Permission.locationAlways],
isPermanentlyDenied: true, isPermanentlyDenied: Platform.isIOS ? true : false,
); );
} }
return false; return false;
} }
///
static _checkSinglePermission(Permission permission) async { static _checkSinglePermission(Permission permission) async {
// //
PermissionStatus status = await permission.status; PermissionStatus status = await permission.status;
PermissionStatus currentPermissionStatus = PermissionStatus.granted; PermissionStatus currentPermissionStatus = PermissionStatus.granted;
// //
if (!status.isGranted) { if (!status.isGranted) {
currentPermissionStatus = await _requestPermission([permission]); currentPermissionStatus = await _requestPermission([permission]);
} }
// //
return currentPermissionStatus; return currentPermissionStatus;
} }
/// ///
static showFailedDialog(List<Permission> permissionList, {bool isPermanentlyDenied = false}) async { static _showFailedDialog(List<Permission> permissionList, {bool isPermanentlyDenied = false}) async {
Get.dialog( Get.dialog(
barrierDismissible: false, barrierDismissible: false,
RemindDialog( RemindDialog(
content: await _getInstructions(permissionList), content: await _getDescription(permissionList),
confirmText: isPermanentlyDenied ? 'Go Settings' : 'Confirm', confirmText: isPermanentlyDenied ? 'Go open' : 'Confirm',
confirmOnTap: () { confirmOnTap: () {
if (isPermanentlyDenied) { if (isPermanentlyDenied) {
openAppSettings(); openAppSettings();
@ -118,24 +120,26 @@ class PermissionUtil {
); );
} }
/// 使 ///
static Future<String> _getInstructions(List<Permission> permissionList) async { static Future<String> _getDescription(List<Permission> permissionList) async {
late Permission failedPermission; late Permission failedPermission;
//
for (Permission permission in permissionList) { for (Permission permission in permissionList) {
PermissionStatus status = await permission.status; if (!await permission.status.isGranted) {
//
if (!status.isGranted || !status.isLimited) {
failedPermission = permission; failedPermission = permission;
break; break;
} }
} }
String explain = '';
if (failedPermission == Permission.storage || failedPermission == Permission.photosAddOnly) { String description = '';
explain = 'We need access to your photo album so you can save wallpapers from the app to your album'; if (failedPermission == Permission.storage) {
description = '$appName needs access to your camera to take photos for creating custom wallpapers. The photos you take will only be used to make personalized wallpapers within the app.';
} else if (failedPermission == Permission.camera) {
description = 'This app can take photos and upload them to a private space.';
} else if (failedPermission == Permission.photos) {
description = 'This enables you to upload photos and save wallpapers.';
} else if (failedPermission == Permission.appTrackingTransparency) {
description = 'We need your permission to access the advertising identifier to provide better ad services.';
} }
return explain; return description;
} }
} }

View File

@ -4,7 +4,7 @@ const appName = 'Visual Wallpaper';
/// +3广 /// +3广
DateTime getGuaranteedDate () { DateTime getGuaranteedDate () {
DateTime? commitDate = DateUtils.getDateTime('2024-08-15 18:30:00'); DateTime? commitDate = DateUtils.getDateTime('2024-08-16 09:30:00');
if (commitDate != null) { if (commitDate != null) {
return commitDate.add(const Duration(days: 3)); return commitDate.add(const Duration(days: 3));
} else { } else {

View File

@ -1,7 +1,6 @@
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flip_card/flip_card.dart'; import 'package:flip_card/flip_card.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';

View File

@ -2,7 +2,7 @@ name: wallpaperx
description: "A new Flutter project." description: "A new Flutter project."
publish_to: 'none' # Remove this line if you wish to publish to pub.dev publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.2.0+6 version: 1.2.0+8
environment: environment:
sdk: '>=3.4.1 <4.0.0' sdk: '>=3.4.1 <4.0.0'