앱 개발하면서 꼭 설정해줘야하는 permission..... 그걸 오늘 뽀개보았다.
https://pub.dev/packages/permission_handler
flutter에는 다행(?)인게 permission_handler라는 플러그인으로 귀찮은 권한 설정을 AOS/iOS 둘다 대응할 수 있게 제공해주는데 😇...
이게 은근 제공해주는게 없다..
그럼 오늘 permission_handler 사용을 한번 해보겠당...당당당
(permission_handler ^5.0.1+1)
1. 플랫폼 별 config
- iOS
: 이전 블로그 글을 참고하면 된다.
: 아, 참고로 Info.plist 와 Pod 설정을 꼼꼼히 잘 확인하고 해야한다.
- AOS
: Android X 대응을 위해 값을 설정해준다.
1. gradle.properties
android.useAndroidX=true
android.enableJetifier=true
2. android/app/build.gradle
android {
compileSdkVersion 30
...
}
3. AndroidManifest.xml > 사용하는 권한 추가
(공식 github repo 참고)
2. 사용하기
나의 경우 프로젝트 내 권한을 요청하는 파일을 따로 빼서 관리했는데,
대략적인 코드 로직은 다음과 같이 구성하였다.
Future<bool> requestCameraPermission(BuildContext context) async {
PermissionStatus status = await Permission.camera.request();
if(!status.isGranted) { // 허용이 안된 경우
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: Text("권한 설정을 확인해주세요."),
actions: [
FlatButton(
onPressed: () {
openAppSettings(); // 앱 설정으로 이동
},
child: Text('설정하기')),
],
);
});
return false;
}
return true;
}
코드를 보면 알 수 있듯이, 권한을 요청하고 만약 허용이 안된 경우 다이얼로그 팝업 > 설정하기 버튼을 통해 앱 설정 화면으로 이동하게끔 하였다.
여기서~~ 끝인 줄 알았지만..,, 안드로이드의 경우 몇 가지 확인할 점이 있다.
안드로이드의 경우, 다시 묻지 않음 옵션이 있기 때문에 위 로직에서 더 추가가 되어야한다. 이 다시묻기에 대한 처리는 shouldShowRequestRationale 메소드를 통해 확인 할 수 있다.
이 메소드는 granded(허용) 또는 denied(거부) 이 2가지 상황에 대해서 다시 묻는지를 확인하는거라, 찍히는 status를 확인하고 로직 처리를 하면 된다.
또 알림과 블루투스에 대해서 다이얼로그를 노출하지 않고,
- Notification
- Bluetooth
이 3개 또한 다이얼로그를 노출하지 않지만, 원하지 않을 경우 사용자가 변경 할 수 있도록 안드로이드는 제공하고 있다.
// iOS 에서는 권한 접근이 불가능한 것들이다.
이제 진짜 끝.. 안드로이드 / iOS 권한에 따른 설정까지 모두 코드 단에서 확인해주면 정말정말 끝이다..
'✏️ > Flutter' 카테고리의 다른 글
[flutter] app icon, app name 변경하기 (0) | 2021.05.25 |
---|---|
[flutter] local notification - FCM foreground 처리하기 (0) | 2021.05.24 |
[flutter][ios] App Store Connect reject 해결 (permission handler issue, ios config 하는 법) (0) | 2021.05.20 |
[flutter] widget에 대해서 알아보자! (immutable, life-cycle) (0) | 2021.05.16 |
[flutter] dart packages - Decimal (intro, json serialize) (0) | 2021.05.13 |