안드로이드 권한 종류 - andeuloideu gwonhan jonglyu

앱을 개발함에 있어서, 장치에 대한 다양한 권한이 필수적으로 요구될 때가 있다.

권한을 설치시에 요구하는 경우,  설치 시간 권한(Install-time permissions)

앱을 설치하여 사용중에 요구하는 경우,  런타임 권한(Runtime permissions) 으로 구분한다.

일반적으로 AndroidManifest.xml 에 명시되면 설치 시간 권한(Install-time permissions)을 요청하게 되며,

사용중 권한을 요구하는 경우에는 대부분 외부 라이브러리인  permission_handler 를 이용해서 런타임 권한을 요청한다.

먼저 안드로이드에서 얻을 수 있는 권한의 종류를 살펴보자.

권한은 개별권한으로 요청 할 수 도 있지만. 다양한 개별권한을 한번에 그룹권한으로 요청 할 수도 있다.

이 글에서는 편의를 위해 너무 많은 개별권한을 나열하지 않고, 단순히 그룹 권한에 종류만 다루려 한다.

1. AOS 권한 종류 

그룹 권한 종류

  • ACTIVITY_RECOGNITION - 활동 인식과 관련된 권한에 사용됩니다.
  • CALENDAR - 사용자의 캘린더와 관련된 런타임 권한에 사용됩니다.
  • CALL_LOG - 전화 통신 기능과 관련된 권한에 사용됩니다.
  • CAMERA - 카메라에 접근하거나 장치에서 이미지/동영상을 캡처하는 것과 관련된 권한에 사용됩니다.
  • CONTACTS - 이 장치의 연락처 및 프로필과 관련된 런타임 권한에 사용됩니다.
  • LOCATION - 장치 위치에 액세스할 수 있는 권한에 사용됩니다.
  • MICROPHONE - 장치에서 마이크 오디오에 액세스하는 것과 관련된 권한에 사용됩니다.
  • NEARBY_DEVICES - 주변 블루투스 장치를 검색하고 연결하는 데 필요합니다.
  • NOTIFICATIONS - 알림 게시와 관련된 권한에 사용됩니다.
  • PHONE - 전화 통신 기능과 관련된 권한에 사용됩니다.
  • READ_MEDIA_AURAL - 공유 저장소에서 오디오 파일을 읽는 데 필요합니다.
  • READ_MEDIA_VISUAL - 공유 저장소에서 이미지 및 비디오 파일을 읽을 수 있는 데 필요합니다.
  • SENSORS - 신체 또는 환경 센서에 액세스하는 것과 관련된 권한에 사용됩니다.
  • SMS - 사용자의 SMS 메시지와 관련된 런타임 권한에 사용됩니다.
  • STORAGE - 공유 외부 저장소와 관련된 런타임 권한에 사용됩니다.

여기 공식 사이트에서 API 레벨에 따른 개별 권한들에 지원 여부를 확인하며 사용하길 바랍니다.

2. AOS 그룹 권한 요청법

안드로이드의 경우 아래파일을 찾아 예시와 같이 추가해주시면 됩니다.

파일 위치 : PROJECT > android/app/main/AndroidManifest.xml

사용법 :  <uses-permission android:name="android.permission-group.그룹권한상수값" />

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lee.woosuk">
<!-- 개별 권한 요청 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 그룹 권한 요청-->
    <uses-permission android:name="android.permission-group.STORAGE" />
    
    <application
        ..생략..
안드로이드 권한 종류 - andeuloideu gwonhan jonglyu
앱 빌드후 사용시 사진과 같이 권한을 요청한다

3. IOS 그룹 권한 종류와 사용법

IOS는 기기가 없어 해보지못했지만, 두 가지 작업을 해야한다고 한다.

1. Podfile을 수정해야한다

파일 위치: Project Folder > iOS > Podfile

방법 : 아래와 같이 필요한 권한을 1값을 가지도록 설정해준다. (주석 # 제거 필요)

 ## dart: PermissionGroup.calendar
        # 'PERMISSION_EVENTS=1',

        ## dart: PermissionGroup.reminders
        # 'PERMISSION_REMINDERS=1',

        ## dart: PermissionGroup.contacts
        # 'PERMISSION_CONTACTS=1',

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

        ## dart: PermissionGroup.microphone
        # 'PERMISSION_MICROPHONE=1',

        ## dart: PermissionGroup.speech
        # 'PERMISSION_SPEECH_RECOGNIZER=1',

        ## dart: PermissionGroup.photos
        # 'PERMISSION_PHOTOS=1',

        ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
        # 'PERMISSION_LOCATION=1',

        ## dart: PermissionGroup.notification
        # 'PERMISSION_NOTIFICATIONS=1',

        ## dart: PermissionGroup.mediaLibrary
        # 'PERMISSION_MEDIA_LIBRARY=1',

        ## dart: PermissionGroup.sensors
        # 'PERMISSION_SENSORS=1',   

        ## dart: PermissionGroup.bluetooth
        # 'PERMISSION_BLUETOOTH=1',

        ## dart: PermissionGroup.appTrackingTransparency
        # 'PERMISSION_APP_TRACKING_TRANSPARENCY=1',

        ## dart: PermissionGroup.criticalAlerts
        # 'PERMISSION_CRITICAL_ALERTS=1'

2.  Info.plist 에 사용하고자하는 권한이 왜 필요한지 설명을 넣는다

(아래 string태그 안에 타당한 이유가 없는 경우, 앱 배포가 거절된다고 한다.)

<!-- Permission options for the `location` group -->
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Need location when in use</string>
    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>Always and when in use!</string>
    <key>NSLocationUsageDescription</key>
    <string>Older devices need location.</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>Can I have location always?</string>

    <!-- Permission options for the `mediaLibrary` group -->
    <key>NSAppleMusicUsageDescription</key>
    <string>Music!</string>
    <key>kTCCServiceMediaLibrary</key>
    <string>media</string>

    <!-- Permission options for the `calendar` group -->
    <key>NSCalendarsUsageDescription</key>
    <string>Calendars</string>

    <!-- Permission options for the `camera` group -->
    <key>NSCameraUsageDescription</key>
    <string>camera</string>

    <!-- Permission options for the `contacts` group -->
    <key>NSContactsUsageDescription</key>
    <string>contacts</string>

    <!-- Permission options for the `microphone` group -->
    <key>NSMicrophoneUsageDescription</key>
    <string>microphone</string>

    <!-- Permission options for the `speech` group -->
    <key>NSSpeechRecognitionUsageDescription</key>
    <string>speech</string>

    <!-- Permission options for the `sensors` group -->
    <key>NSMotionUsageDescription</key>
    <string>motion</string>

    <!-- Permission options for the `photos` group -->
    <key>NSPhotoLibraryUsageDescription</key>
    <string>photos</string>

    <!-- Permission options for the `reminder` group -->
    <key>NSRemindersUsageDescription</key>
    <string>reminders</string>

    <!-- Permission options for the `bluetooth` -->
    <key>NSBluetoothAlwaysUsageDescription</key>
    <string>bluetooth</string>
    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>bluetooth</string>

    <!-- Permission options for the `appTrackingTransparency` -->
    <key>NSUserTrackingUsageDescription</key>
    <string>appTrackingTransparency</string>

이렇게 진행하면 앱설치시 필요권한을 물어 얻을수 있다.

4. AOS / IOS 그룹 권한 비교

Type  Android iOS
unknown 
(Only ReturnType)
 - -
calendar (0)
달력 관리
Calendar Calendar (Events)
camera (1)
사진 찍기, 비디오 녹화
Camera Photos (Camera Roll and Camera)
contacts (2)
연락처 관리
Contacts Address Book
location (3)
현재 기기 위치
Fine And Coarse Location CoreLocation (Always and WhenInUse)
locationAlways (4)
현재 기기 위치
Fine and Coarse Location CoreLocation (Always)
locationWhenInUse (5)
현재 기기 위치
Find And Coarse Location CoreLocation (WhenInUse)
microphone (7)
오디오 녹음
Microphone Microphone
speech (13)
오디오 말하기 (글자 읽어주기)
Microphone Speech
phone (8)
전화 걸기, 관리
Phone x
reminders (10)
미리 알림
x Reminders
sensors (11)
심박수 및 신체 센서
Body Sensors CoreMotion
sms (12)
문자 보내기, 보기
Sms x
storage (14)
사진, 미디어, 파일 접근
External Storage x
photos (9)
미디어 라이브러리
x MPMediaLibrary

 도표 출처 : https://dalgonakit.tistory.com/110

참조 사이트

https://github.com/Baseflow/flutter-permission-handler/tree/master/permission_handler

https://developer.android.com/reference/android/Manifest.permission#constants

https://pub.dev/packages/permission_handler

아래의 다음글에서 런타임 권한요청을 위한  flutter에 permission_handler  사용법을 다루겠습니다.

https://bangu4.tistory.com/348

[Flutter] permission_handler 사용법 (AOS / IOS)

대부분의 운영 체제에서 권한은 설치시에만 요구하도록 지원합니다. 하지만 앱의 정상실행을 위해서는 실행되는 동안에도 필요 권한(런타임 권한요청)을 사용자에게 요청해야합니다 . permission_

bangu4.tistory.com

안드로이드 권한 종류 - andeuloideu gwonhan jonglyu