ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Flutter camera ios 권한 요청, 처리 하기
    개발/flutter 2021. 8. 25. 16:16

    권한 요청에대한 기능을 수행하기 위해서 permission_handler 플러그인을 설치해야 합니다.

    프로젝트의 다른 plugin 버전 때문에 4.x 버전을 사용했습니다.

     

    permission_handler: ^4.4.0+hotfix.4

     

    해당 플러그인을 사용해 카메라 뿐만 아니라 다양한 디바이스에 권한을 요청, 관리할수 있습니다.

    우선 ios 에서 podfile 에 세팅을 해줘야하는데 camera 의 경우 이렇게 해주면 됩니다.

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        flutter_additional_ios_build_settings(target)
          ## dart: PermissionGroup.camera
          'PERMISSION_CAMERA=1'
      end
    end

    https://pub.dev/packages/permission_handler 여기서 다른 옵션을 확인 할수있습니다.

     

    1. 권한 확인하기

     

    이제 PermissionHandler() 인스턴스를 생성해 기능을 활용할수있습니다.

    class PermissionManager {
        static Future<bool> checkCameraPermission() async {
          PermissionHandler handler = PermissionHandler();
    
          final status = await handler.checkPermissionStatus(PermissionGroup.camera);
          print("camera status $status");
          switch (status) {
            case PermissionStatus.granted:
              return true;
            case PermissionStatus.unknown:
              return requestCameraPermission();
    
              break;
            default:
              return false;
          }
        }
      }

    checkPermissionHandler() 를 사용해 현재 앱의 권한 상태를 받아올수 있습니다.

    이때 처리해야할 상태는 

    1. 거부

    2. 수락

    3. 모름

     

    세가지 입니다.

    거부일시 다시 다이얼로그를 띄워 설정으로 가서 직접 권한을 수락으로 수정하도록 할것이고 

    수락일시는 넘어가고

    모를때는 권한 요청을 할것입니다.

     

    위 코드의 switch 문 을 보면 알수 있듯이 true 가 리턴된다면 넘어가고

    false가 리턴되면 설정으로 가서 직접 권한을 수락으로 수정하도록 합니다.

     

    2. 결과값 처리하기

    Future<void> _requestCameraPermission() async {
        final result = await PermissionManager.checkCameraPermission();
        print("_requestCameraPermission $result");
        if (!result) {
          return AppRoutes.buildDialogWithReturn(
              context,
              TwoButtonDialog(DialogAndToastMessageType.QUESTION,
                  LocaleKeys.permission_camera.tr(), () {
                PermissionManager.openAppSetting();
                Navigator.pop(context);
              }, () {
                exit(0);
              },
                  yesTitle: LocaleKeys.settings_menu_setting.tr(),
                  noTitle: LocaleKeys.buttons_close.tr()));
        } else {
          return;
        }
      }

    위 코드에서 result에는  아까 리턴한 true /false 가 들어가며 처리할 로직을 넣어줬습니다.

    Permissionmanager.openAppSetting() 함수를 사용하면 앱 세팅화면을 띄워줍니다.

     

    만약 아직 권한을 모르는 상태일때는 새로 요청을 보내야합니다.

    위 PermissionStatus.unknown 상태일때는 다음과같은 로직을 탑니다.

     

    3. 권한 요청하기

    static Future<bool> requestCameraPermission() async {
        PermissionHandler handler = PermissionHandler();
    
        var result = await handler.requestPermissions([PermissionGroup.camera]);
        print("result ${result[PermissionGroup.camera]}");
        if (result[PermissionGroup.camera] == PermissionStatus.granted) {
          return true;
        } else {
          return false;
        }
      }

    requestPermission() 함수를 사용해 요청을 보내고 응답을 받습니다.

    거부할시 false를 리턴해주면 2번 로직을 타고 앱설정으로 보낼것입니다.

     

     

    댓글

Designed by Tistory.