1. 권한 명세
설정 파일을 통해 앱의 접근권한을 지정하는 것을 말합니다. 설정은 app -> manifests -> AndroidManifest.xml 에서 다음과 같이 user-permission 할 수 있으며
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
상기 예제는 android.permission.INTERNET을 통해 인터넷 접근권한을 지정하고 있습니다. 권한을 명시하면 앱에서 해당 권한을 필요로 할 때 사용자에게 권한의 허용 여부를 묻게 됩니다.
android.permission.INTERNET처럼 보편적인 권한은 일반 권한(Normal Permission)으로 분류되며 일반 권한에 해당하는 권한은 다음과 같은 것들이 있습니다.
ACCESS_NETWORK_STATE | 네트워크 상태 확인 |
ACCESS_WIFI_STATE | 와이파이 상태 확인 |
BLUETOOTH | 블루투스 상태 확인 |
INTERNET | 인터넷(네트워크) 사용 |
NFC | NFC 사용 |
SET_ALARM | 알람 설정 |
VIBRATE | 진동 설정 |
반면 위치나 전화번호부 같은 개인정보영역이나 기타 다른 앱의 실행에 영향을 줄 수 있는 권한의 경우 '위험 권한'으로 분류되며 다음과 같은 권한을 위험 권한으로 분류하고 있습니다.
CALENDAR | READ_CALENDAR | 캘린더 읽기 |
WRITE_CALENDAR | 캘린더 쓰기 | |
CAMERA | CAMERA | 카메라 |
CONTACTS | READ_CONTACTS | 주소록 읽기 |
WRITE_CONTACTS | 주소록 쓰기 | |
GET_ACCOUNTS | 게정 정보 얻기 | |
LOCATION | ACCESS_FINE_LOCATION | 위치 확인 |
ACCESS_COARSE_LOCATION | ||
MICROPHONE | RECORD_AUDIO | 녹음기능 |
PHONE | READ_PHONE_STATE | 폰 상태 |
READ_PHONE_NUMBERS | 전화번호 | |
CALL_PHONE | 전화 발신 | |
ANSWER_PHONE_CALLS | 전화 응답 | |
READ_CALL_LOG | 전화 로그 읽기 | |
WRITE_CALL_LOG | 전화 로그 쓰기 | |
ADD_VOICEMAIL | 음성메일 추가 | |
USE_SIP | SIP 사용 | |
PROCESS_OUTGOING_CALLS | Broadcast 수신 | |
SENSORS | BODY_SENSORS | 센서 |
SMS | SEND_SMS | 문자 발신 |
RECEIVE_SMS | 문자 수신 | |
READ_SMS | 문자 읽기 | |
READ_WAP_PUSH | WAP 읽기 | |
RECEIVE_MMS | MMS 받기 | |
STORAGE | READ_EXTERNAL_STORAGE | 외부 스토리지 읽기 |
WRITE_EXTERNAL_STORAGE | 외부 스토리지 쓰기 |
https://developer.android.com/guide/topics/security/permissions?hl=ko
위 표를 보면 READ_CONTACTS와 WRITE_CONTACTS가 CONTACTS라는 그룹으로 묶여 있는 걸 확인할 수 있는데 이는 일단 어떤 권한이 부여되면 해당 권한에 속하는 그룹의 다른 권한에도 다시 권한 요청을 하지 않고 동일한 권한이 그대로 부여된다는 것을 의미합니다. 예를 들어
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
처럼 권한이 명시된 경우 처음에는 권한의 허용 요청이 발생하게 되고 이를 승인했다면 이후 같은 그룹에 해당하는 android.permission.WRITE_CONTACTS에도 따로 권한 요청이 나오지 않고 그대로 권한이 부여되는 것입니다.
이러한 위험 권한은 Gradle Scrips -> build.gradle (Modules app)에 targetSdkVersion이 23 이상으로 설정되어야만 사용이 가능하며
소스코드 안에서 권한 요청과 이에 관련된 부가적인 처리가 추가되어야 합니다.
2. 기능 명세
권한과는 직접 관련이 없지만 AndroidManifest.xml에 앱에서 필요한 기능을 지정하는 것으로 user-feature태그로 명시됩니다. 아래 예제에서는 카메라 기능을 사용하기 위해 명시되는 이를 보여주고 있는데 앱에서 사용되는 기능에 따라 아래 태그와 같이 기능 명세가 자동으로 추가되는 경우가 있으며
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-feature android:name="andoird.hardware.camera" android:required="true"></uses-feature>
</manifest>
이렇게 명시되는 기능에 따라 앱스토어에서 앱이 검색되는 범위가 달라지게 됩니다. 예를 들어 위에서 처럼 카메라 기능이 명시되면 카메라가 없는 기기에서는 앱이 검색되지 않습니다. 다만 android:required를 false로 설정하면 해당 기능을 사용할 수 없는 기기에서도 앱을 검색하고 내려받아 설치할 수 있도록 조치할 수 있습니다.
'Mobile > Kotlin' 카테고리의 다른 글
[Kotlin] HttpURLConnection (2) | 2021.01.12 |
---|---|
[Kotlin] 컨텐트 리졸버(Content Resolver) (0) | 2021.01.11 |
[Kotlin] 포어그라운드(Foreground) 서비스 (0) | 2021.01.08 |
[Kotlin] 서비스(Service) (2) | 2021.01.07 |
[Kotlin] AsyncTask (0) | 2021.01.06 |