코린이 탈출기
chapter 11.8 - 안드로이드의 권한 설정 - TedPermission 활용 본문
chapter 11.8 - 안드로이드의 권한 설정 - TedPermission 활용
50HEE 2021. 6. 15. 20:35TedPermission - 권한 획득을 도와주는 라이브러리입니다.
권한을 획득한다는 의미는 사용자의 폰에서 개발자가 마음대로 사용하면 안 되는 기능들을 사용자의 허가를 받아서 사용하는 것입니다.
이러한 권한을 크게 2가지로 분류를 하여 설명하겠습니다. (설명을 위한 임의의 분류입니다.)
재산 사용 : 인터넷 연결(데이터 요금 사용), 전화 연결, 문자 전송 등등...
개인 정보 : 연락처 목록, 현재 위치 정보(GPS), 사진첩 목록, 카메라 촬영
권한을 획득하는 방법을 보겠습니다.
기본적인 권한 - 빈번하게 사용하지만, 피해도가 심각하지 않은 것들을 말합니다.
예를 들면 INTERNET(인터넷), WRITE_EXTERNER_STORAGE(메모 기록) 등이 있습니다.

기본적인 권한의 경우에는 Manifests > uses-permission으로 명시만 하면 사용이 가능합니다.
민감한 권한 - 기본적인 권한 외의 모든 기능을 말합니다.
Marshmallow(6.0) 이전까지는 민감한 권한들도 Manifests에 명시만 해주면 사용이 가능했었습니다.
하지만 이제는 Manifests에 uses-permission 등록은 반드시 해주어야 하고, 코틀린 코드로 다시 권한을 물어봐서 허가를 받아야만 실행이 가능해졌습니다.
이러한 과정은 1) 권한 여부를 확인하고, 2) 승인 상태면 할 행동을 정하고, 3) 거부 시에 할 행동도 정한 후 4) 실제 권한 요청 등으로 코드를 직접 짜기에는 번거롭게 되어있습니다.
하지만 라이브러리를 이용하면 비교적 쉽게 코딩이 가능해졌습니다.
코드는 전화 연결에 관한 권한을 획득하는 법을 통해 라이브러리를 알아보겠습니다.

전화 연결에 관한 xml은 간단하게 그려보았습니다.
라이브러리를 이용하는 방법에 대해 알아보겠습니다.

구글에 원하는 키워드만 검색하면 github 사이트에 라이브러리가 나옵니다.
https://github.com/ParkSangGwon/TedPermission
라이브러리를 활용하는 것은 이전 글을 통해 자세하게 설명되어있습니다.
2021.06.14 - [안드로이드/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기] - chapter 11.1 - 라이브러리
라이브러리 활용을 위해 라이센스를 확인합니다.

설치하는 방법을 보겠습니다.



Gradle Scripts > build.gradle(Module:~) > dependencies 적어줍니다.
implementation 'gun0912.ted:tedpermission:2.2.3'
작성 후 sync now 눌러줍니다.
사용법을 보겠습니다.

설명이 어려운 분은 아래 자세한 설명을 통해 보시길 바랍니다.

'전화 걸기' 버튼을 눌렀을 경우 권한 허가를 받도록 설정하겠습니다. 20번 줄과 같습니다.
권한 허가에 대한 가이드 북을 만들기 위해 변수로 저장하겠습니다. object는 익명 클래스로, 무언가를 담아주기 위한 빈 덩어리입니다. : 뒤에 나오는 것을 담아줍니다. 여기서는 PermissionListener로 권한에 따른 행동 방침을 담는 가이드북으로 설정하였습니다. 24번 줄과 같습니다.
25 ~ 43까지는 권한 허가에 대한 가이드 북의 내용을 담은 것입니다.

24번 줄까지 완성하였다면 object에 오류가 뜰 것입니다. object에 마우스를 올린 다음 ALT + ENTER을 누르면 위와 같은 상자가 나옵니다. 두 줄을 모두 추가해줍니다.

추가하면 위와 같이 자동완성이 되는데 여기서 TODO 줄(26, 30번 줄)은 모두 지워줍니다.
다시 위의 코드로 돌아가서 25번 줄 onPermissionGranter 함수는 권한을 승인했을 경우 해야 할 행동을 입력하는 함수이고, 35번 줄 onPermissionDenied 함수는 권한을 거절했을 경우에 해야 할 행동을 입력하는 함수입니다.
25번 줄 onPermissionGranter 함수는 권한을 승인하여 전화 연결을 진행하겠습니다.
(전화 연결에 관한 코드는 아래 글을 참고하시기 바랍니다.)
35번 줄 onPermissionDenied 함수는 권한을 거절했을 경우 권한이 없어 전화 연결을 실패했다고 토스트로 띄워주겠습니다.
2021.04.21 - [안드로이드/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기] - chapter 3.2 - 기초 이벤트 처리, 로그, 토스트 활용하기
토스트를 띄울 경우 띄우는 화면의 위치를 잘 확인하고 선택해야 합니다.
여기까지는 권한의 여부에 따른 행동에 대한 가이드 북을 설정한 것으로 이제는 권한에 대한 여부를 물어볼 코드를 작성해야 합니다. 45 ~ 49번 줄에 해당합니다.
이 코드 같은 경우는 그대로 따라 작성해주시면 됩니다.
TedPermission을 불러서 어디서 사용할 것인지를 설정합니다. 45번 줄에 해당합니다.
권한에 따른 가이드 북이 어떤 것인지를 불러줍니다. ( ) 안에는 위에서 설정한 변수를 넣어주면 됩니다. 46번 줄에 해당합니다.
권한 설정이 거절됐을 경우에 나올 메시지를 입력해줍니다. 47번 줄에 해당합니다.
48번 줄은 어떤 권한을 설정해 줄 것인지를 입력해줍니다.

여기서 Manifest는 (android)로 설정해 주어야 합니다. 그 후 어떤 권한을 확인할 것인지 골라줍니다.
마지막으로 49번 줄은 실제로 위의 코드를 확인해 달라는 의미입니다.
여기까지 라이브러리를 활용한 권한 획득에 관한 설정을 하였습니다.

이제 Manifests로 가서 원하는 권한을 설정해 주면 됩니다. 5번 줄에 해당합니다.
앱을 사용하는데 여러 가지의 권한이 필요하다고 해서 앱 시작점에서 몰아서 권한을 요청하는 식으로의 코드는 되도록 작성하지 않는 것이 좋습니다.
실제로 해당 권한이 필요한 순간 권한을 요청해서 사용자가 어떤 이유로 이 권한이 필요한지를 이해할 수 있게 해 주도록 합니다.
<코드 정리>
val 변수 명1 = object : PermissionListener {
override fun onPermissionGranted(){
// 권한이 승인된 경우 할 행동}
override fun onPermissionDenied(deniedPermissions: MutableList<String>?){
// 권한이 거절된 경우 할 행동} }
TedPermission.with(띄울 화면 this)
.setPermissionListener(변수 명1)
.setDeniedMessage("권한 승인이 거절된 경우 보낼 메시지 / 설정 창으로 유도하는 안내문")
.setPermissions(Manifest.permission.원하는 권한 / 여러 개 등록 가능)
.check()
'인터넷 강의 > 클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기' 카테고리의 다른 글
| chapter 13.1 - API 통신 (1) | 2021.06.18 |
|---|---|
| chapter 12.1 - BaseActivity (0) | 2021.06.15 |
| chapter 11.7 - https vs http - 안드로이드 보안 처리 (0) | 2021.06.14 |
| chapter 11.6 - 캐싱 처리 (0) | 2021.06.14 |
| chapter 11.5 - Glide 라이브러리 활용하기 (0) | 2021.06.14 |