프로그램 개발/Flutter

[flutter] 권한 관리 : permission handler

(ㅇㅅㅎ) 2023. 4. 4. 15:08
728x90
반응형

 

 

 

출처 : pub permission_handler

 앱 개발 시 특정 권한을 획득해야 동작이 가능한 기능들이 존재합니다. flutter에서는 permission_handler라는 패키지 형태로 제공하여 쉽게 사용할 수 있습니다.

 

 

 

패키지 설치(택 1)

 · Terminal에서 [flutter pub add permission_handler] 입력

 · pubspec.yaml에서 [permission_handler : 버전] 입력 후 Pub get 클릭

 

 

 

네이티브 설정

 · Android

    1. gradle.properties 파일에 코드 추가합니다.

android.useAndroidX=true
android.enableJetifier=true

 

    2. build.gralde 파일에 compileSdkVersion을 33으로 설정합니다.

android {
  compileSdkVersion 33
  ...
}

 

    3. AndroidManifest.xml에서 사용할 권한을 추가합니다.

<uses-permission android:name="android.permission.권한"/>

 

 

 · IOS

    1. Info.plist에서 사용할 권한을 추가합니다.

<dict>
	...

    <!-- 예시 camera -->
    <key>NSCameraUsageDescription</key>
    <string>camera</string>
</dict>

 

    2. Podfile에서 사용할 권한을 수정합니다.

...
        ## dart: PermissionGroup.camera
        'PERMISSION_CAMERA=1',
...

 

 

 

권한 종류

 · Android : Android developers의 Manifest.permission 페이지에서 확인하시길 바랍니다.

 · IOS : permission_handler의 documentation 페이지에서 확인하시길 바랍니다.

 

 

 

권한 상태 확인

var status = await Permission.camera.status;
// PermissionStatus로는 
// denied, granted, restricted, limited, permanentlyDenied
// 가 있습니다.

 

 

 

권한 요청

// 권한이 거부되었다면
if(status.isDenied){
    // 권한을 요청합니다.
    PermissionStatus request = await Permission.camera.request();
}

 

 

 

권한 수동 요청

// 앱 설정 창을 열어서 수동으로 권한을 주도록 유도합니다.
openAppSettings();

// Dialog 형식입니다.
showDialog(
  context: context,
  builder: (BuildContext context) {
    return AlertDialog(
      shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(10.0)),
      content: Text("권한 설정을 확인해주세요."),
      actions: [
        TextButton(
          child: Text('취소'),
          onPressed: () => Navigator.pop(context),
        ),
        TextButton(
            onPressed: () {
              openAppSettings();
            },
            child: Text('설정하기'))
      ],
    );
  }
);

 

 

 

Android11(API 30)

 Android11부터는 사용자가 앱이 설치된 동안 특정 권한을 2번 이상 거부한다면 앱에서 그 권한을 요청해도 사용자에게 권한 요청이 표시되지 않습니다. 이 경우에는 권한 수동 요청을 통해서 직접 권한을 주어야 합니다. 그리고 Android 11에서는 storage 부분이 업데이트되었기 때문에 이 페이지에서 확인하시길 바랍니다.

 

 

 

출처

https://pub.dev/packages/permission_handler/install

 

permission_handler | Flutter Package

Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.

pub.dev

 

 

반응형