우리는 privacy와 authorization과 관련해서는 기술보다는 사용자를 우선으로 해야 한다. 어떻게 하면 사용자 경험을 방해하지 않고 더 많은 통제권을 줄 수 있을지, 그럼으로써 더 나은 사용자 환경을 제공하려면 어떤 방식을 써야 하는지 생각해야 한다.
그렇다고 유저를 너무 귀찮게 해서도 안 된다! (당연함 불편하다...)
필요 이상의 정보를 요청하지 않으면서 사용자와의 신뢰를 구축하고, 사용자가 모르는 사이에 이미 통제권을 가지고 있다는 걸 알게 해야 한다.
사용자에게 권한을 필요로 하는 것들 중에서 권한을 요청하지 않고 사용할 수 있는 것은 아무것도 없다. 사진, 카메라부터 위치까지 모두 그렇다. 사실 당연하다. 개인정보니까!
그렇기 때문에, 모든 설정은 iOS 시스템 설정을 우선시한다. 만약, 앱에서 권한이 필요한 부분을 따로 구현해야 한다고 한다면 해당 권한 상태를 체크하고, 접근을 묻는 alert을 띄워주어야 한다.
조금 늦은 과제를 하는 김에 그 과정을 정리해 보려고 한다. 안 하면 분명 까묵을 것 같아서 ^_^ ...
위치와 카메라
- iOS 12
- 위치 허용 / 비허용만 있었음
- iOS 13
- 한 번만 허용 / 전체 허용으로 나뉨
- 한 번만 허용의 경우에는 일시적으로 잠깐 권한을 줬다가 뺐는 것이다.
- 점점 가면 갈수록 통제권이 사용자에게 주어지게 된다. (기존의 허용 / 비허용과 달리 한 번만 허용이라는 선택지가 더 주어지니까!)
- 한 번만 허용 / 전체 허용으로 나뉨
- iOS 14
- 정확한 위치에 대해서 허용하는 권한이 생겼음
- 정확한 위치를 켠다면 오차는 있겠지만(건물 1~2개 차이) 비교적 정확한 위경도값이 온다.
- 하지만, 개발자가 생각해야 할 것은 권한 부여 상태와 정확도값을 모두 체크해야 한다.
- 단순히 위치를 받아오는 것에서 끝나는 게 아니라, 어떤 식으로 얼마나 위치를 받아오면 사용자가 편할지? 앱이 더욱 효율적으로 돌아갈지를 생각해야 한다는 것이다.
- 예를 들면, 러닝 앱의 경우에는 달리는 동안 비교적 정확한 위치를 체크하고 있어야 명확한 기록이 가능할 것이기 때문에 항상 위치를 허용받고, 위치 단위는 비교적 정확하게 받는 것이 좋다.
- 다만, 날씨앱의 경우에는 조금 다르다. 날씨앱은 러닝앱보다 정확한 기록이 필요하지 않을 것이다. 또, 백그라운드에 있을 때도 매번 위치를 수집할 필요 없이 유저가 앱에 들어왔을 때만 위치를 체크하면 되도록 구현하는 것이 사용자 입장에서도, 앱을 구동하는 것에도 좋을 것이다.
- 정확한 위치에 대해서 허용하는 권한이 생겼음
- iOS 15
- Location Button이 나왔다.
- 두세 줄로 작성했던 코드를 조금 줄일 수 있게 되었다.
- 일반 버튼과 유사하지만, 로케이션 버튼을 눌렀을 때 현재 위치에 대한 단발적인 요청을 보낸다.
- 제어센터나 상태바에서 위치 지점에 권한을 어떻게, 얼마나 쓰고 있는지 알 수 있게 되었다.
- Location Button이 나왔다.
사용자에게 권한을 어떻게 주어야 할까?
명확히는, 사용자가 앱에게 부여한 권한 상태에 따라 어떻게 처리해야 할까?
- iOS 시스템 권한
- 있음 (위치 서비스 켜고 있음)
- 권한 요청 가능
- 권한 허용함
- 데이터 접근 가능
- 앱 데이터 잘 사용 가능!
- 추후 권한 거부할 수 있음
- 이 경우에는 다시 권한을 켤 수 있도록 알림을 보내야 할 것이다.(없음 - 권한 요청 불가능으로)
- 데이터 접근 가능
- 권한 비허용함
- 이 경우에는 다시 권한을 켤 수 있도록 알림을 보내야 할 것이다.(없음 - 권한 요청 불가능으로)
- 권한 허용함
- 권한 요청 가능
- 없음
- 권한 요청 불가능
- 이 경우에는 다시 권한을 켤 수 있도록 알림을 보내야 할 것이다.
- 다만, 이때 불필요한 권한을 요청하면 안 된다.
- 알림에서 위치 권한을 요청하는 이유를 분명하게 요청해야 한다.
- ex) 날씨 정보를 가져오기 위해서 위치 정보가 필요해요!
- 권한 요청 불가능
- 있음 (위치 서비스 켜고 있음)
화면 구성
그럼 우리는 권한 설정이 어떠냐에 따라 다른 알림과 뷰를 띄워주어야 할 것이다.
사용자가 맵을 사용하려면, 우리는 그 사용자가 위치 권한을 켜고 있는지 먼저 확인하고 위치 권한을 켜고 있다면 앱에 주어진 위치 권한 상태를 알고 그에 따라 대응해야 할 것이다. 위치 권한을 켜고 있지 않다면 알림을 보내고!
- 사용자가 위치 권한을 켜고 있을 경우
- 앱에서 위치 권한을 체크하는 method로 넘어간다. CLAuthorizationStatus에 따라 이 안에서 또 갈리게 됨!
- notDetermined
- 사용자가 최초로 앱을 켰을 때를 의미한다.
- 이때, 앱에서 위치를 사용하겠다는 알림을 띄워주어야 한다.
- restricted
- 제한된 경우는 아마 키즈 모드를 사용할 경우... 부모가 자녀의 핸드폰의 권한을 통제하고 있을 경우를 말한다.
- denied
- 위치 권한이 거부된 경우를 말한다. 이때는 아래 사용자가 위치 권한을 키고 있지 않은 경우와 마찬가지로 위치 권한이 켜져 있지 않다는 걸 사용자에게 알려준 후, iPhone 설정창에서 위치 권한을 킬 수 있도록 설정창을 띄워 주면 좋을 것이다.
- authorizedAlways
- 위치 권한이 항상 허용된 상태로 허용된 권한을 이용하여 위치를 요청하거나 할 수 있다.
- authorizedWhenInUse
- 사용할 때 위치 권한이 허용된 상태로 말 그대로 사용자가 앱을 사용중일 때 위치를 사용할 수 있다.
- authorized
- 이것도 허용된 상태를 말한다!
- notDetermined
- 앱에서 위치 권한을 체크하는 method로 넘어간다. CLAuthorizationStatus에 따라 이 안에서 또 갈리게 됨!
- 사용자가 위치 권한을 켜고 있지 않을 경우
- 위치 권한이 켜져 있지 않다는 걸 사용자에게 알려준 후, iPhone 설정창에서 위치 권한을 킬 수 있도록 설정창을 띄워 주면 좋을 것이다.
원래는 코드 설명까지 쓰고 싶었는데, 시간이 없을 것 같아서 ... ~,~ 로직을 정리하는 데서 만족하려고 한다.
그래도 해당 내용을 정리할 때 나름 코드에 주석까지 달아가며 자세히 정리했으니?! 참고하실 분들은 아래 깃헙 링크를 참고하심 댈 거 같다
자세한 코드는 이쪽으로... ^_^ b
'iOS > App' 카테고리의 다른 글
[iOS] NavigationBar BackgroundColor 노치까지 채우기 (0) | 2023.12.02 |
---|---|
[RxSwift] Single (1) | 2023.11.21 |
[iOS] Push Notification 보내기 (1) | 2023.11.13 |
[iOS] URLSession (0) | 2023.09.01 |
[iOS] Notification (2) | 2023.08.21 |