dev/flutter
권한
wlrn566
2023. 1. 25. 15:08
permission_handler 라이브러리 추가
permission_handler | Flutter Package
Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
pub.dev
IOS
1. Podfile 에 해당 코드 추가하기
post_install ~ 코드가 존재한다면 지우고 추가하기
필요한 권한만 주석 해제
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
## dart: PermissionGroup.calendar
# 'PERMISSION_EVENTS=1',
## dart: PermissionGroup.reminders
# 'PERMISSION_REMINDERS=1',
## dart: PermissionGroup.contacts
# 'PERMISSION_CONTACTS=1',
## dart: PermissionGroup.camera
# 'PERMISSION_CAMERA=1',
## dart: PermissionGroup.microphone
# 'PERMISSION_MICROPHONE=1',
## dart: PermissionGroup.speech
# 'PERMISSION_SPEECH_RECOGNIZER=1',
## dart: PermissionGroup.photos
# 'PERMISSION_PHOTOS=1',
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
'PERMISSION_LOCATION=1'
## dart: PermissionGroup.notification
# 'PERMISSION_NOTIFICATIONS=1',
## dart: PermissionGroup.mediaLibrary
# 'PERMISSION_MEDIA_LIBRARY=1',
## dart: PermissionGroup.sensors
# 'PERMISSION_SENSORS=1',
## dart: PermissionGroup.bluetooth
# 'PERMISSION_BLUETOOTH=1',
## dart: PermissionGroup.appTrackingTransparency
# 'PERMISSION_APP_TRACKING_TRANSPARENCY=1',
## dart: PermissionGroup.criticalAlerts
# 'PERMISSION_CRITICAL_ALERTS=1'
]
end
# End of the permission_handler configuration
end
end
이러한 오류가 뜬다면 위 코드에 아래 코드 추가해주기
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
2. Info.plist 파일에 필요 권한문구 넣어주기
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
안드로이드
1. gradle.properties 에서 AndroidX 설정 체크
android.useAndroidX=true
android.enableJetifier=true
2. AndroidManifest 파일에 permission 추가
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
권한 내용에 대한 목록 및 설명
Manifest.permission | Android Developers
developer.android.com
3. android > app > build.gradle - compileSdkVersion 설정
android {
compileSdkVersion 33 # 필요한 버전 명시
...
}
flutter 코드 내에서 권한 체크 실행
Future<bool> permission() async {
var requestStatus = await Permission.location.request(); // 권한 요청
var status = await Permission.location.status; // 권한 상태
log("requestStatus ${requestStatus.name}");
log("status ${status.name}");
if (status.isGranted) {
log("isGranted");
return true;
} else if (status.isLimited) {
log("isLimited");
return true;
} else if (requestStatus.isPermanentlyDenied || status.isPermanentlyDenied) {
log("isPermanentlyDenied");
openAppSettings();
return false;
} else if (status.isRestricted) {
log("isRestricted");
openAppSettings();
return false;
} else if (status.isDenied) {
// 권한 요청 거절
log("isDenied");
return false;
} else {
return false;
}
}