알람 생성 기능을 구현하다 보면 수많은 Edge Case를 경험할 수 있을 것이다.
다른 앱을 사용하고 있을 때, 휴대폰이 재부팅 되었을 때, 같은 시간에 울리는 중복된 알람이 설정되었을 때... 등등 수많은 Edge Case가 존재한다.
이러한 Edge Case를 해결하기 위한 기능을 구현할 때 많은 Permission 설정을 경험하였다.
그래서 이번 포스팅에는 '알람 생성시 함께 사용되는 안드로이드 퍼미션'에 대해 알아볼 것이다.
다른 앱 위에 표시를 허용해주는 퍼미션
Android Api 30부터 해당 퍼미션은 매니페스트 등록만으로 자동 허용된다.
해당 퍼미션이 필요했던 이유는 무엇이었을까?
알람이 발생하려면 다음과 같은 단계로 기능이 작동된다.
Edge Case : 다른 앱을 사용하고 있을 때
해당 퍼미션이 허용되지 않는다면 알람이 발생하여도 Edge Case를 해결 할 수 없게된다.
정확한 알람을 설정하게 해주는 퍼미션
Android API 31부터 정확한 알람을 생성할 때 SCHEDULE_EXACT_ALARM 퍼미션을 사용해야한다.
API 31 이전에는 정확한 알람 생성을 위한 퍼미션이 따로 존재하지 않았다.
안드로이드 12부터 업데이트된 사용자의 프라이버시와 배터리 최적화 기능을 위해 앱이 사용자의 디바이스에서 정확한 시간에 작업을 수행할 수 있도록 허용하려고 해당 퍼미션을 추가하였다.
정확한 알람을 설정하게 해주는 퍼미션
해당 퍼미션은 Android API 32부터 위에 있는 SCHEDULE_EXACT_ALARM 퍼미션과 함께 명시해주어야 한다.
API 31에서 SCHEDULE_EXACT_ALARM으로만 정확한 알람을 설정할 수 있었지만 보안상의 이슈로 인해 해당 퍼미션도 같이 사용되어야 정확성을 보장받을 수 있다.
푸쉬 알림을 보내기 위한 퍼미션
Android API 29부터 앱이 백그라운드에 존재할 시 액티비티 실행을 제한하고 있다.
이로인해 알람 발생시 해제 액티비티를 화면에 출력하기 위해서 Notification을 사용하고 있다.
해당 퍼미션은 API 33이상부터 적용되는 런타임 권한이다.
*런타임 권한은 매니페스트 등록 뿐만 아니라 사용자로부터 직접 권한을 요청받는 권한이다.
포그라운드 서비스를 사용하기 위한 퍼미션
Android API 34부터 Notification 서비스를 이용하려면 필수로 등록해줘야 하는 퍼미션이다.
API 34부터 포그라운드 서비스에 대한 정책이 강화되어 Notification 뿐만이 아닌 다른 포그라운드 서비스(ex. 카메라, 지역, 전화 등)를 사용할 때 해당 퍼미션을 필수로 받고 있다.