본문 바로가기
Android/오류 대응

OS14 알람 및 리와인더 권한 대응을 해보자

by 안스 인민군 2024. 1. 22.

 

지난 주 월요일 저녁 퇴근 후,

급속도로 올라오는 Firebase CrashReport를 보며 무슨 일이 일어났겠구나. 라고 생각은 했지만

OS 업데이트로 인한 알람 권한 이슈가 올라 올 것이라고는 생각도 못했다...

이번 글은 지난 주에 있었던 일을 공유해보려 한다.


 사건의 시작

??????

 

FireBase CrashReport에 위와 같은 에러가 올라왔고 읽어보면 SecurityException이라고 되어 있는걸 보니 권한 이슈라고는 짐작했다.

그런데 이해가 안되는건 배포는 한참전에 되었는데 이제와서 갑자기???????

일단 문제를 해결하기 위해 구글링을 해보니 아래와 같이 공식문서를 발견할 수 있었다.

공식문서

위의 내용을 간략하게 요약하면

  1. OS14 부터 알람 권한(SCHEDULE_EXACT_ALARM)은 권한의 defalut가 False이다.
  2. 그러므로 알람의 기능을 사용하기 전에 반드시 권한을 체크해야 한다.
  3. 이유는 알람 기능을 사용하게 되면 배터리 소모가 올라가기 때문에 이를 방지해야 한다.
  4. USE_EXACT_ALARM 권한을 사용하면 사용자에게 권한을 물어보지 않지만 Google PlayStore에서 Reject의 사유가 될 수 있다.

내가 담당하는 서비스의 기능 중 알람기능은 특정 요일, 특정 시간에 맞춰 Notification으로 알람이 오는 기능이 있다.

이 기능을 사용하기 위해서는 알림 기능(Notification) + 알람 기능(Alarm) 두가지의 권한이 필요하다.

그래서 추가적으로 알림 권한 또한 체크가 필요하다.

그래서 알림 , 알람 두가지의 앱을 다운로드 받을때 권한의 default를 표로 나타내 보았다.

  Notification Alarm
OS12 이하 O O(권한 설정 불가)
OS12 O O
OS13 X O
OS14 X X

 

Solution

해결을 하기 전 2가지를 생각해야 한다.

1. 알람 기능을 사용하기 전 Alarm, Notification을 둘다 확인하는 Permission 프로세스를 만든다.

  • 참고로, Alarm Permission은 안드로이드 permission Dialog 가 없고 설정 화면으로 이동해야만 권한을 받을 수 있다.
  • OS 버젼 별 프로세스가 달라야 한다. (ex OS11에서는 Alarm Permission을 확인 시 Crash가 발생한다.)

2. 이전 Alarm 기능을 사용하는 이용자에 대한 대응이 필요하다.

  • 서비스의 특성상 앱을 진입 시 Schaduler 를 실행하는 코드가 있는데 권한을 받지 않았다면 오류가 발생한다.
  • 방어코드를 추가하여 기능 사용을 막는다.

후기

이번 사건을 통해 OS가 업데이트 됨으로서 변경되는 부분들에 대해 주기적으로 점검할 필요가 있음을 느꼈다.

또한 Permission을 사용하여 어떠한 기능이 작동이 가능하다면 코드의 마지막에는 Permission을 검증하는 코드를 추가하여 예기치 못하는 Crash는 막도록 하자.

참고로, 링크 를 보면 2024년 1월 초에 OS14를 탑재한 갤럭시 Tab이 출시하여 1월이 되자마자 발생한 것으로 보인다...