본문 바로가기

✏️/Flutter

[flutter] permission handler로 권한 뽀개기

728x90

앱 개발하면서 꼭 설정해줘야하는 permission..... 그걸 오늘 뽀개보았다.

https://pub.dev/packages/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

 

flutter에는 다행(?)인게 permission_handler라는 플러그인으로 귀찮은 권한 설정을 AOS/iOS 둘다 대응할 수 있게 제공해주는데 😇...
이게 은근 제공해주는게 없다..

그럼 오늘 permission_handler 사용을 한번 해보겠당...당당당
(permission_handler ^5.0.1+1)


1. 플랫폼 별 config 

- iOS
: 이전 블로그 글을 참고하면 된다. 
: 아, 참고로 Info.plist 와 Pod 설정을 꼼꼼히 잘 확인하고 해야한다. 

 

[flutter][ios] App Store Connect reject 해결 (permission handler issue, ios config 하는 법)

flutter 프로젝트를 하면서 permission을 간단하게 다루기 위해 permission handler를 많이 사용할 것이다. 이 플러그인을 사용 하면서 ios 앱 업로드 시 발생 했던 오류에 대해서 설명하고, 어떻게 해결 하

doitduri.tistory.com

- 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 권한에 따른 설정까지 모두 코드 단에서 확인해주면 정말정말 끝이다..