Jin's Dev Story

[Flutter] 권한 팝업 요청 기능 본문

Web & Android/Flutter

[Flutter] 권한 팝업 요청 기능

woojin._. 2023. 9. 12. 10:48

패키지 설치

1. pubspec.yaml 파일에 dependencies: 를 찾아 permission_handler: ^8.3.0 을 입력

dependencies:
  flutter:
    sdk: flutter
  permission_handler: ^8.3.0

2. 옆에 전구 모양 아이콘 클릭하여 pub get 실행

3. import 'package:permission_handler/permission_handler.dart'; 를 main.dart 파일 가장 상단에 추가

  • permission_handler.dart 파일에 있는 함수와 변수들을 가져다쓸 수 있게 해주는 문법이다.

Android 기기 설정

1. android/gradle.properties 파일 확인

  • 아래 코드가 입력되어 있는지 확인 후 없으면 추가
android.useAndroidX=true
android.enableJetifier=true

2. andorid/app/build.gradle 파일

  • 아래 코드가 31로 되어있는지 확인
    • 다른 숫자면 31로 변경
    • 숫자 대신 문자가 채워져 있으면 그냥 냅두기
android {
	compileSdkVersion 31

3. android/app/main/AndroidManifest 파일에 코드 추가

  • <mainfest ~~ > 아래, <application ~~~> 위에 작성
		<uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>

 

연락처 권한 확인

  • Permission.contacts 에서 contacts 말고 camera, location 같은 거 써서 카메라, 위치 권한 허락 받을 수 있음
  • Permission.contacts.status 라고 사용하면 연락처 권한 상태를 출력할 수 있음
    • await이 붙은 이유는 await 뒤에 있는 문장이 실행되는 속도가 느리기 때문에 Dart 언어의 특징으로는 다음 줄을 먼저 실행할 것임
    • 그렇기 때문에 await을 붙여 다음 줄을 실행하지 않고 기다려 달라는 뜻이다.
    • await은 async 안에 붙어 있어야 한다.
getPermission() async {
    var status = await Permission.contacts.status;
    if (status.isGranted) {
      print('허락됨');
    } else if (status.isDenied) {
      print('거절됨');
      Permission.contacts.request();   // 현재 거절된 상태니 팝업창 띄워달라는 코드
    }
  }
  •  
  • Permission.contacts.request() 는 사용자에게 연락처 사용 권한을 달라고 요청

→ 주의

  • Android 11버전 이상과 iOS에서는 유저가 한 두번 이상 권한 요청을 거절하면 다시는 팝업을 띄울 수 없음
    • 앱 설정 오픈해서 유저가 직접 설정을 바꿔야 함
    • openAppSettings(); 을 작성하면 앱 설정을 오픈해줌