오늘은 안드로이드 notification에 대해서 정리해 보도록 하겠습니다.

 

1. Notification종류

1-1. 기본 Notification

안드로이드에서 API를 통해서 Notification을 보내면,

아래와 같이 status Bar의 왼쪽에 Icon으로 나타나기도 하구요.

앱아이콘에 배지로 나타나기도 하며, Notification Drawer에서도 드래그다운해서 볼수도 있습니다.

가장 기본적인 것은 아래와 같이, 얇은 StatusBar에 나타나는 것 이지요.

 

 

아래로 드래그해서 아래와 같이 해당 Notification을 볼 수 있습니다.

 

 

1-2. Heads-up notification

Android5부터 사용된 노티피케이션인데요.

아래와 같이 상단에 내용이 바로 나와서 빠르게 인터랙션을 할 수 있습니다.

유저에게 중요한 내용일 경우에 사용을 하게 되는데요.

보통 메세징앱에서 많이 볼 수 잇지요.

 

 

위와같이 넓은 면적을 차지하며 나타나지만, 곧 사라지게 되는데요.

Notification Drawer를 드래그다운해서 다시 볼 수 있습니다.

이러한 Heades-up Notification을 사용하기 위해서는 아래의 조건을 맞추어야 하는데요.

 

  • 액티비티가 fullscreen Mode에 있어야 합니다.
    • fullScreen Intent를 사용해야 합니다.
  • Notification에서 priority(중요도)가 높게 설정되어 있어야 합니다.
    • Notification Channel도 priority가 높게 설정되어 있어야 합니다.

 

 

3. Lock Screen Notification

Notification은 폰이 잠금화면에 있을때도 나타날 수 있는데요.

 

 

이 때 Notification의 내용이 보이도록 할지 않할지 유저가 선택할 수 있습니다.

Android8버전부터는 채널별로 lockScreen에서 Notification을 켜거나 끌 수 있습니다.

 

1-3. icon Badge Notificaiton

 

지원이 되는 Launchers에서는 app icon은 아래 이미지와 같이 색깔이 있는 점으로 표현될 수 있습니다.

노티를 바로 보기위해서, long-press를 하면 되는데요.

개인적으로는 자주 사용하게 되는 UX는 아닌것 같습니다.

저희같이 소규모 앱을 만드는 개인개발자들이 여기까지 고려할 필요는 없을 것 같네요.

 

 

 

 

2. Notification 디테일

2-1. 기본 Notification API

위에서 본대로 기본 Notificationd은 아래와 같이 구성되어 있는데요.

각 부분들은 특정함수와 연결되어 컨트롤 할 수 있으므로 알아두면 좋습니다.

 

 

광고

 

순서 구분 필수여부 API
1 smallIcon 필수 setSmallIcon() 함수로 설정
2 app name - system에 의해서 자동으로 설정
3 time stamp - system에 의해서 설정,
setWhen()으로 시간을 설정하거나
setShowWhen(false) 로 숨길 수 있습니다.
4 large icon 선택적 보통 메신저에서 상대방 사진같은 것으로 많이 쓰인 것을 볼 수 있습니다.
구글에서는 특별한 디자인적 니즈때문이 아니라면, 굳이 앱 아이콘을 사용하는 것은 권장하지 않습니다.
setLargeIcon() 함수로 설정
5 title 선택적 setContentTitle() 함수로 설정
6 text 선택적 setContentText() 함수로 설정

 

 

2-2. Notification Channels

Android8.0(API26)부터는 모든 Notification은 Channel에 연결되어야 합니다.

채널은 카테고라이징됨에 의해서, 유저들이 해당카테고리들의 알람을 한번에 컨트롤할 수 있게 됩니다.

 

 

코드적으로도 Channel 이라는 존재는 중요한데요.

 

 

 

 

2-2. Actions

노티를 받았을 때, 그에 대해 바로 응답하거나, 혹은 알람설정노티에서 바로 취소하는 기능도 있으면 좋겠지요.

Action이라는 이름으로 이것들이 존재합니다.

Android7(API24)부터는 노티에서 바로 메세지를 응답해서 답을 하는일등이 가능합니다.

 

 

3. Expandable Notification

메일 내용같이 긴 내용의 노티는 바로 보고 싶기도 한데요.

이를 위해서, Expandable 노티가 존재합니다.

 

여기까지만 합시다라는 말이 나올 것 같은데요.

아직 더 있습니다.

 

4. Group

같은 앱에서 나온 노티는 한데 묶어서 볼 수 있어야 겠지요.

API레벨 24이상부터는 이렇게 묶어서 볼 수 있는 기능이 제공됩니다.

만약 같은 앱이 4개 이상의 노티를 보내면,

grouping에 관해서 어떠한 설정을 하지 않더라도,

OS가 알아서 이것들을 묶어서 유저가 볼 수 있게 해 줍니다.

 

5. Channels

Group만 있으면 되는 것 아닐까요?

개발자로서의 내적 갈등이 생기기 시작하지요.

하지만 선택의 여지는 없습니다.

왜냐하면, API레벨 26이상부터는 필수적으로 채널을 적용해야 하기 때문입니다.

구글이 말하는 채널의 목적은,

수많은 노티들을 일정 채널별로 묶어둔 다음,

유저가 필요한 것들만 선별할 수 있도록 하기 위함이라고 합니다.

UI상에서는 Categories라는 이름으로 나오기 때문에,

내가 구현한 채널은 어디서 볼 수 있는 것인지 모를 수 있습니다.

 

 

덕분의 써야할 코드량이 대폭 증가하게 되었습니다.

 

6. Importance

우리말로 중요도라고 할 수도 있을 것 같은데요.

안드로이드 시스템이 얼마나 유저를 interrupt할지를 정하는 기준이 됩니다.

당연히 코드상에서 설정을 해주어야 하는 부분이구요.

Urgent, High, Medium, Low가 있는데요.

Urgent의 경우 상단노티와 함께 사운드가 나게되고,

Low는 사운드도 UI도 나오지 않게 됩니다.

 

API25이하는 각 노티들에 설정된 중요도에 따라서 결정되구요.

API26이상부터는 노티가 들어가는 채널(혹은 카테고리)의 중요도에 따라서,

각 노티의 중요도가 결정되기 때문에 채널을 코딩할 때 이를 신경써주어야 합니다.

실질적으로 각 노티의 중요도와 채널의 중요도 모두 신중하게 설정해야 겠지요.

개발자가 설정한 중요도 값은 계속 유지되는 것은 아니구요.

유저가 그 값을 바꿀 수 있도록 되어 있습니다.

 

 

 

6. Notification 업데이트 하는 방법

 

7. Notification제한

노티를 하는데 있어서는 초당 1번 이상은 보내지 못하도록 하고 있습니다.

 

 

728x90

+ Recent posts