안드로이드 알림 권한에 관한 모든것(feat. Android 13)

Ted Park
박상권의 삽질블로그
7 min readOct 11, 2022

targetSdkVersion만 안올리면 아직 대응 안해도 된다고 생각하셨나요?
targetSdkVersion과 상관없이 Android 13 기기부터 알림 권한 팝업이 뜨기 시작합니다.
대응하면서 알아야 할것들과 공식문서에는 없는 꿀팁들도 공유합니다.

지금까지 안드로이드에서 알림을 표시할때는 권한이 없어도 개발자 마음대로 알림을 만들고 표시할 수 있었습니다.😈

알림을 활용해서 사용자에게 앱을 사용하는데 필요한 커뮤니케이션을 하거나, 주요 정보를 제공하면서 사용자가 더 앱을 잘 사용하게 만들어 줄 수도 있습니다.

하지만 마음대로 알림을 만들 수 있는 점을 악용해서
- 무분별하게 광고알림을 보내거나
- 올바르지 않은 방법으로 앱으로 재유입시키려는 어뷰징 앱들도 많이 존재합니다. 😰

(앱뿐만 아니라 크롬으로도 보내는 스팸 광고들..)

그래서 Android 8.0(Oreo) 부터는 알림채널(Notification Channel)을 도입시켰습니다.
https://developer.android.com/develop/ui/views/notifications/channels

  • 알림을 보내려는 용도에 맞는 채널로 알림을 보내도록 하고
  • 알림 채널별로 On/Off 해서 사용자가 원하는 알림 채널만 받을 수 있도록 했었습니다.

하지만 여전히 사용자들은 알림을 켜고 있습니다

앱의 설정에서 알림을 켜고 끌 수 있도록 제공하고 있음에도 불구하고

  • 알림을 어디서 끄는지 모르거나
  • 귀찮아서

알림을 켠 상태로 유지하는 사용자들이 대부분입니다. 🤔

Android 13부터 생긴 알림 권한

그래서 Android 13 (Tiramisu)부터는 알림 권한(POST_NOTIFICATIONS)이 추가되었습니다.

https://developer.android.com/about/versions/13/changes/notification-permission

아이폰 사용자라면 익숙하실텐데
이미 아이폰에서는 예전부터 적용되어 있던 개념입니다.
(안드로이드와 아이폰은 점점 서로가 서로를 닮아가고 있음.. 🤬)

안드로이드에서도 사용자로부터 알림권한을 요청하고 허가받은 뒤부터 알림을 표시할 수 있도록 바뀌게 되는 것입니다.

알림 권한을 확인하고 요청하는 방법은 기존에 권한을 요청하던 방식과 동일하게

  1. Manifest에 권한을 선언하시고
  2. 권한 허용여부를 확인하고 권한을 요청하면 됩니다.
<uses-permission
android:name="android.permission.POST_NOTIFICATIONS"
android:minSdkVersion="33" />

(잠깐! TedPermission을 사용하면 쉽고 빠르게 권한 확인/요청 가능합니다.)
https://github.com/ParkSangGwon/TedPermission

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
val isGranted = TedPermission.create()
.setPermissions(Manifest.permission.POST_NOTIFICATIONS)
.check()
.isGranted
}

targetSdkVersion만 안올리면 아직 대응 안해도 되는거 아닌가요?

네, 아닙니다.
targetSdkVersion과 상관없이 Android 13 기기부터 알림 권한 팝업이 뜨기 시작합니다. ☠️

targetSdkVersion이 Android 13(API 33)이 아니라면
내가 원하는 시점에 권한요청을 할 수 없습니다.
Notification Channel을 생성한뒤 Activity가 실행되는 시점에 알림권한 요청 팝업이 뜨게 됩니다.

언제 권한 요청을 해야 하는가? 🧐

아무 설명없이 알림 권한을 내 놓으라고 한다면,
사용자는 왜 알림권한이 필요한지 공감할 수 없는 상태에서 ‘거부’를 누를 수 밖에 없을것입니다.

그러므로 사용자가 알림이 필요하다고 느끼는 시점에 권한을 요청해야
‘허용'할 가능성이 높을것 입니다.

  • 사용자가 ‘알림' 아이콘을 눌러서 알림을 확인하려고 할때
  • SNS에서 다른 사람의 계정을 follow 했을때
  • 음식을 주문했거나, 제품을 주문했거나 등 거래를 시작한뒤
    진행상황을 궁금해 하는 시점일때

알림권한 거부한 사용자를 다시 허용하게 만들기

권한요청을 ‘거부’하고 나면 코드를 통해서 앱권한 요청을 다시 할 수 없습니다. 😭
다시 ‘허용'하려면 사용자가 직접 앱의 설정을 들어가서 권한 ‘허용'을 해주어야 합니다.

만약 사용자가 알림 권한을 ‘거부' 한 상태인데 앱으로 채팅문의를 했다면?

  • 채팅문의에 대한 답장을 보내더라도 사용자는 답변 알림을 받을 수 없음
  • 이 사실을 모르는 사용자는 채팅문의에 대한 답장을 안한다고 생각함

이와 같은 문제뿐만 아니라 여러가지 이유로
이미 알림권한을 ‘거부'한 사용자 이더라도 중요한 알림을 받아야 하는 상황이라면 사용자가 다시 권한을 ‘허용' 하도록 만들 필요가 있습니다.

중요한 알림이 있었는데 못받으셨어요!

  1. 다른 채널을 통해 ‘알림이 있음’을 알리기

문자나 이메일같은 사용자의 다른 정보를 알고 있다면 해당 채널을 통해서
아래와 같은 안내를 할 수 있습니다.

(알림내용..내용..내용..)
중요한 알림이 있었는데 알림권한이 거부되어 있어서 못받으셨어요.
알림 권한 허용하고 다음번 부터는 중요한 알림들을 받아 보실래요?
(링크를 누르면 앱의 알림설정 화면이 열리는 딥링크였으면 좋았을텐데..)

2. 앱 안에서도 알리기

앱 화면에서도 배너, 팝업과 같은 방식을 활용해서
1번에서 표시했던 내용들을 보여주도록 합니다.

문자나 이메일정보가 없는 사용자라면
앱을 실행 했을때 중요 알림을 확인할 수도 있고 해당 메세지를 통해서 다시 알림권한 허용을 할 수도 있기 때문입니다.

그외에 알림권한과 관련된 유용한 정보들은 공식문서를 통해서 확인하실 수 있습니다.

https://developer.android.com/about/versions/13/changes/notification-permission

아이폰을 닮아가는 안드로이드… 안드로이드를 닮아가는 아이폰..
언젠가는 두개를 합친 하나의 OS가 나올지도…(일 가능성은 없겠죠?)

항상 변화하는 OS별 대응하느라 고생하고 있는 모바일 개발자들분들이여,
오늘도 한번에 빌드 성공하시기 바랍니다.

감사합니다. 피쓰!

안드로이드 개발자들이 모여있는 오픈채팅방에 참여해보세요 .
Q&A 및 팁을 공유하는 방입니다.

--

--