플러터에서는 permission_handler로 권한을 얻어온다.
Flutter 앱을 만들던 도중 카메라와 저장소에 접근하여 정보를 얻어올 일이 생겼습니다.
이에 대해 어떻게 해결할지 찾아보다가, pub.dev의 권한 관련 최고 인기작 permission_handler를 통해 문제를 해결했습니다.
지금부터 그 과정을 공유해볼게요 : )
permission_handler 적용
일단 늘 그랬듯 pubspec.yaml에 permission_handler를 추가해줍니다.
해당 패키지의 공식 문서는 아래를 참고해주세요.
https://pub.dev/packages/permission_handler
pub get을 통해 설치했다면
android의 경우 android/app/src/main/AndroidManifest.xml 을 열어줍니다.
그리고 <application> 과 들여쓰기를 맞춰서, <application> 위에 다음 태그를 적어줍니다.
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
(다른 권한에 대해서는 위의 공식 페이지를 참고해주세요.)
iOS의 경우 info.plist를 수정해야합니다.
아래를 참고하시되 카메라만 수정하실 거라면 Info.plist의 source에 아래 코드 정도만 붙여넣어 주셔도 무방합니다.
(iOS는 External Storage 접근이 불가능합니다.)
<key>NSCameraUsageDescription</key>
<string>camera</string>
이제, 권한배열에 대한 처리를 해줍시다.
해당 권한들에 대해 statuses는 그 정보를 가지고 있고,
카메라나 저장소 둘 중 어떤 것 중 하나라도 Grant되어 있지 않다면 false입니다.
(이는 안드로이드 기준인데, iOS의 storage는 아마 default로 denied 상태이지 않을까 추측해봅니다.)
Future<bool> _getStatuses() async {
Map<Permission, PermissionStatus> statuses =
await [Permission.storage, Permission.camera].request();
if (await Permission.camera.isGranted &&
await Permission.storage.isGranted) {
return Future.value(true);
} else {
return Future.value(false);
}
}
자, 여기까지 했으면 다 했습니다.
저는 다음 글에서 다룰 QR code와 연계하여 이를 활용했는데,
제가 직접 생성한 임의의 버튼을 누르면 아래 _scan 함수가 실행되고,
_scan함수는 _getStautses 함수를 호출하여 permission 요청을 실행합니다.
Future _scan() async {
await _getStatuses();
String? qrString = await scanner.scan();
if (qrString != null) {
setState(() {
_qrString = qrString;
});
}
}
추가로, 권한 세팅을 거부했을 경우 특히 iOS는 해당 permission을 영구적으로 거부한 것으로 처리하기 때문에 직접 settings에 들어가서 권한을 얻어야 합니다. 이를 위해 openAppSettings() 함수를 호출해줘야 합니다. 자세한 설명은 아래 링크로 들어가셔서 확인해주세요 :)
https://pub.dev/packages/app_settings
'flutter > Flutter 정보' 카테고리의 다른 글
Flutter 2.0 카카오 로그인 연동하기 (1) | 2021.09.14 |
---|---|
Flutter 2.0 웹뷰 - 네이티브 통신(WebView - Native) (0) | 2021.09.14 |
Flutter 2.0 QR code 인식하기 (1) | 2021.09.13 |
Flutter 2.0 웹뷰 (뒤로가기 기능까지!) (0) | 2021.09.13 |
최근댓글