알림 개요

알림은 사용자에게 알림, 다른 사람과의 의사소통 또는 앱에서 보내는 시기적절한 기타 정보를 제공하기 위해 Android가 앱의 UI 외부에 표시하는 메시지입니다. 사용자는 알림을 탭하여 열거나 알림에서 직접 조치를 취할 수 있습니다.

이 페이지에서는 알림이 표시되는 위치와 이용 가능한 기능에 대한 개요를 제공합니다. 알림을 빌드하고 싶다면 이 문서 말고 알림 만들기를 참조하세요.

디자인과 상호작용 패턴에 대한 자세한 내용은 알림 디자인 가이드를 참조하세요. 또한 모바일과 웨어러블 앱에서 Notification.Style API를 사용하는 권장사항 데모는 Android 알림 샘플을 참조하세요.

기기에 알림 표시

알림은 다양한 위치와 형식으로 사용자에게 표시됩니다. 예를 들어 상태 표시줄의 아이콘, 알림 창의 상세한 항목, 앱 아이콘의 배지로 표시되거나 페어링된 웨어러블 기기에 자동으로 표시될 수 있습니다.

상태 표시줄과 알림 창

알림을 보내면 먼저 상태 표시줄의 아이콘으로 나타납니다.

그림 1. 상태 표시줄 왼쪽에 아이콘 표시

사용자는 상태 표시줄을 아래로 스와이프하면 알림 창을 열 수 있습니다. 여기에서 자세한 내용을 확인하고 알림에 대한 조치를 취할 수 있습니다.

그림 2. 알림 창에 있는 알림

사용자는 창에 있는 알림을 아래로 드래그할 수 있습니다. 그러면 추가적인 내용과 액션 버튼(있는 경우)이 표시됩니다.

알림은 앱이나 사용자가 닫을 때까지 알림 창에 남아 있습니다.

헤즈업 알림

Android 5.0부터는 알림을 헤즈업 알림이라는 부동 창에 잠시 표시할 수 있습니다. 일반적으로 이 동작은 사용자가 즉시 알아야 하는 중요한 알림에 사용하며, 기기의 잠금이 해제되었을 경우에만 표시됩니다.

그림 3. 포그라운드 앱 앞에 표시되는 헤즈업 알림

헤즈업 알림은 앱이 알림을 보내는 순간에 표시되었다가 잠시 후에 사라지지만, 알림 창에는 평소와 같이 그대로 표시됩니다.

헤즈업 알림이 표시되는 조건의 예시는 다음과 같습니다.

  • 사용자의 Activity가 전체 화면 모드인 경우(앱이 fullScreenIntent를 사용하는 경우).
  • 알림의 우선순위가 높고 Android 7.1(API 레벨 25) 이하를 실행하는 기기에서 벨소리나 진동을 사용하는 경우.
  • 알림 채널이 Android 8.0(API 레벨 26) 이상을 실행하는 기기에서 중요도가 높을 경우.

잠금 화면

Android 5.0부터 알림을 잠금 화면에 표시할 수 있습니다.

앱이 안전한 잠금 화면에 표시한 알림에서 세부 사항을 보여주는 수준이나 알림을 잠금 화면에 표시할지 여부까지 프로그래밍 방식으로 설정할 수 있습니다.

사용자는 시스템 설정을 사용하여 잠금 화면 알림에서 세부 사항을 보여주는 수준을 설정할 수 있습니다. 여기에는 모든 잠금 화면 알림을 비활성화하는 옵션이 포함됩니다. Android 8.0부터 사용자는 각 알림 채널에 대해 잠금 화면 알림을 비활성화하거나 활성화할 수 있습니다.

그림 4. 알림이 민감한 내용을 숨긴 채로 잠금 화면에 표시

자세한 내용은 잠금 화면 가시성 설정 방법을 참조하세요.

앱 아이콘 배지

Android 8.0(API 레벨 26) 이상을 실행하는 기기에서 지원하는 런처의 경우, 앱 아이콘은 해당 앱 런처 아이콘에 컬러 "배지"("알림 표시 점"이라고도 함)로 새로운 알림을 표시합니다.

사용자는 앱 아이콘을 길게 누르면 해당 앱의 알림을 확인할 수 있습니다. 그러면 알림 창과 마찬가지로 이 메뉴에서 알림을 닫거나 알림에 대한 조치를 취할 수 있습니다.

그림 5. 알림 배지와 길게 누르는 메뉴

배지의 작동 방식에 대한 자세한 내용은 알림 배지를 참조하세요.

Wear OS 기기

사용자에게 페어링된 Wear OS 기기가 있을 경우, 확장형 세부 정보 및 액션 버튼을 포함한 알림이 자동으로 Wear OS 기기에 표시됩니다.

또한 웨어러블 기기에서 알림의 일부 외형을 맞춤 설정하여 환경을 개선하고 추천 회신과 음성 입력 회신을 포함한 여러 가지 액션을 제공할 수 있습니다. 자세한 내용은 알림에 각 웨어러블 기기 전용 기능을 추가하는 방법을 참조하세요.

그림 6. 알림이 페어링된 Wear OS 기기에 자동으로 표시

알림 분석

알림의 디자인은 시스템 템플릿에 따라 결정됩니다. 앱에서 각 템플릿 부분에 대한 내용을 정의하기만 하면 됩니다. 알림의 일부 상세 정보는 펼쳐진 뷰에서만 표시됩니다.

그림 7. 기본적인 세부 정보가 포함된 알림

알림의 가장 일반적인 부분은 다음과 같이 그림 7에 표시되어 있습니다.

  1. 소형 아이콘: 이는 필수 항목이며 setSmallIcon()으로 설정합니다.
  2. 앱 이름: 시스템에서 제공합니다.
  3. 타임 스탬프: 시스템에서 제공하지만 setWhen()으로 재정의하거나 setShowWhen(false)으로 숨길 수 있습니다.
  4. 대형 아이콘: 이는 선택 항목이며(일반적으로 연락처 사진에만 사용되며, 앱 아이콘에는 사용하지 않음) setLargeIcon()으로 설정합니다.
  5. 제목: 이는 선택 항목이며 setContentTitle()로 설정합니다.
  6. 텍스트: 이는 선택 항목이며 setContentText()로 설정합니다.

이러한 기능을 사용하여 알림을 생성하는 방법 등에 대한 자세한 내용은 알림 만들기를 참조하세요.

알림 작업

필수는 아니지만 모든 알림은 사용자가 탭했을 때 적절한 앱 Activity를 열어야 합니다. 이 기본적인 알림 작업 외에도 알림에서 앱 관련 작업을 완료하는 작업 버튼을 추가할 수 있습니다(보통 Activity를 열지 않은 상태에서). 그림 9를 참조하세요.

그림 9. 액션 버튼을 포함한 알림

Android 7.0(API 레벨 24)부터 메시지에 답변하거나 알림에서 직접 다른 텍스트를 입력하는 액션을 추가할 수 있습니다.

Android 10(API 레벨 29)부터 플랫폼에서 추천된 인텐트 기반 액션으로 액션 버튼을 자동 생성할 수 있습니다.

액션 버튼을 추가하는 방법은 알림 만들기에서 자세히 설명합니다.

확장형 알림

기본적으로 알림의 텍스트 내용은 한 줄로 잘려서 표시합니다. 그보다 긴 알림을 표시하고 싶다면 추가적인 템플릿을 적용하여 확장 가능한 큰 텍스트 영역을 활성화할 수 있습니다. 그림 8을 참조하세요.

그림 8. 내용이 긴 텍스트를 위한 확장형 알림

또한 이미지, 받은 편지함 스타일, 채팅 대화 또는 미디어 재생 컨트롤로 확장형 알림을 만들 수 있습니다. 자세한 내용은 확장형 알림 만들기를 참조하세요.

모든 기기에 디자인 호환성을 적절히 보장하기 위해 항상 이 템플릿을 사용하는 것이 좋지만, 필요한 경우 맞춤 알림 레이아웃을 만들 수 있습니다.

알림 업데이트 및 그룹

추가 업데이트가 있을 때 사용자에게 여러 개의 알림이나 중복된 알림이 대량으로 전송되지 않도록 새로운 알림을 보내기보다는 기존 알림을 업데이트하거나 받은 편지함 스타일 알림을 사용하여 대화형 업데이트를 보여주는 것이 좋습니다.

그러나 여러 개의 알림을 전송할 필요가 있다면 개별 알림을 그룹화해야 합니다(Android 7.0 이상에서 제공). 알림 그룹을 사용하면 알림 창에서 여러 개의 알림을 하나의 게시물로 축소하고 요약을 표시할 수 있습니다. 사용자가 알림을 펼치면 각 알림의 세부 정보가 나타납니다.

사용자가 차례로 알림 그룹과 그 안의 각 알림을 펼치면 더욱 자세한 정보를 확인할 수 있습니다.

그림 10. 접힌 알림 그룹과 펼쳐진 알림 그룹

그룹에 알림을 추가하는 방법을 알아보려면 알림 그룹 만들기를 참조하세요.

알림 채널

Android 8.0(API 레벨 26)부터 모든 알림은 채널에 할당되어야 합니다. 그렇지 않으면 알림이 나타나지 않습니다. 알림을 채널로 분류하면 사용자가 (모든 알림을 비활성화하지 않고도) 앱의 특정 알림 채널을 비활성화할 수 있고 각 채널의 시청각적 옵션을 제어할 수 있습니다. 이 작업은 모두 Android 시스템 설정에서 수행할 수 있습니다(그림 11). 또한 알림을 길게 눌러 관련 채널에 대한 동작을 변경할 수 있습니다.

Android 7.1(API 레벨 25) 이하를 실행하는 기기에서 사용자는 각각의 앱 단위로만 알림을 관리할 수 있습니다(실질적으로 Android 7.1 이하에서는 각 앱이 채널을 하나만 가집니다).

그림 11. 시계 앱과 그중 한 개 채널에 대한 알림 설정

하나의 앱이 여러 개의 알림 채널을 보유할 수 있으며, 앱이 보내는 알림 유형에 따라 별도의 채널이 있습니다. 또한 사용자가 앱에서 선택한 내용에 따라 알림 채널을 만들 수도 있습니다. 예를 들어 메시지 앱의 사용자가 만드는 대화 그룹마다 별도의 알림 채널을 설정할 수 있습니다.

또한 Android 8.0 이상에서는 채널에서 알림의 중요도를 지정합니다. 그러므로 동일한 알림 채널에 게시된 모든 알림은 동일하게 동작합니다.

자세한 내용은 알림 채널 만들기 및 관리를 참조하세요.

알림 중요도

Android는 알림의 중요도에 따라 알림이 사용자에게 (시청각적으로) 간섭하는 정도를 결정합니다. 알림의 중요도가 높을수록 알림의 간섭 수준이 커집니다.

Android 8.0(API 레벨 26) 이상에서 알림의 중요도는 알림이 게시된 채널의 importance에 따라 결정됩니다. 사용자는 시스템 설정에서 알림 채널의 중요도를 변경할 수 있습니다(그림 12). Android 7.1(API 레벨 25) 이하에서 각 알림의 중요도는 알림의 priority에 따라 결정됩니다.

그림 12. Android 8.0 이상에서 사용자가 각 채널의 중요도 변경 가능

지정 가능한 중요도는 다음과 같습니다.

  • 긴급: 알림음이 있고 헤즈업 알림으로 표시됩니다.
  • 높음: 알림음이 있습니다.
  • 중간: 알림음이 없습니다.
  • 낮음: 알림음이 없고 상태 표시줄에 표시되지 않습니다.

모든 알림은 중요도와 관계없이 방해되지 않는 시스템 UI 위치에 표시됩니다. 예를 들어 알림 창이나 런처 아이콘의 배지로 표시됩니다(그러나 알림 배지의 외형은 수정할 수 있습니다).

자세한 내용은 중요도 설정 방법을 참조하세요.

방해 금지 모드

Android 5.0(API 레벨 21)부터 사용자는 방해 금지 모드를 활성화할 수 있습니다. 이 모드에서는 모든 알림의 알림음과 진동이 무음으로 바뀝니다. 사용자가 별도로 지정하지 않으면 알림은 평소와 같이 시스템 UI에 나타납니다.

방해 금지 모드에는 세 가지 수준이 있습니다.

  • 전체 무음: 알람, 음악, 동영상, 게임 등에서 나는 모든 소리와 진동을 차단합니다.
  • 알람만 허용: 알람을 제외한 모든 소리와 진동을 차단합니다.
  • 우선순위만 허용: 사용자가 방해를 허용하는 시스템상의 카테고리를 구성할 수 있습니다(예: 알림, 알림, 이벤트, 전화 또는 메시지만 허용). 메시지와 전화의 경우, 메시지를 보내거나 전화를 건 사람에 따라 필터를 선택할 수도 있습니다(그림 13).

그림 13. 사용자는 시스템상의 카테고리(왼쪽)와 메시지를 보내거나 전화를 건 사람(오른쪽)을 기준으로 알림을 허용할 수 있습니다.

Android 8.0(API 레벨 26) 이상에서 채널별로 방해 금지 모드를 재정의하면 각 앱의 카테고리(채널이라고도 함)에 대해 추가로 알림을 허용할 수 있습니다. 예를 들어 결제 앱에는 인출 및 예금과 관련된 알림에 대한 채널이 있을 수 있습니다. 사용자는 인출 또는 예금 알림을 허용하거나 우선순위 모드에서 둘 모두 허용할 수 있습니다. Android 7.1(API 레벨 25) 이하를 실행하는 기기에서는 채널이 아니라 각 앱에 대해 알림을 허용할 수 있습니다.

이런 사용자 설정에 적절하게 알림을 구성하려면 시스템상의 카테고리와 채널을 설정해야 합니다.

포그라운드 서비스에 대한 알림

앱이 "포그라운드 서비스"(미디어 플레이어와 같이 오랫동안 백그라운드에서 실행되면서 사용자에게 보이는 Service)를 실행할 때 알림이 필요합니다. 이 알림은 다른 알림처럼 닫을 수 없습니다. 알림을 삭제하려면 서비스를 중단하거나 "포그라운드" 상태에서 삭제해야 합니다.

자세한 내용은 포그라운드에서 서비스 실행을 참조하세요. 미디어 플레이어를 빌드하고 있다면 포그라운드 서비스로 MediaStyle 알림 사용하기를 참조하세요.

게시 제한

Android 8.1(API 레벨 27)부터 앱은 초당 2회 이상 알림음을 낼 수 없습니다. 앱이 1초에 여러 개의 알림을 게시할 경우, 모든 알림이 예상한 대로 표시되기는 하지만 1초에 게시되는 첫 번째 알림만 알림음을 냅니다.

그러나 Android는 알림을 업데이트할 때도 사용 제한을 적용합니다. 하나의 알림에 대한 업데이트를 (대부분 1초 이내에) 지나치게 자주 게시할 경우, 시스템이 일부 업데이트를 누락할 수 있습니다.

알림 호환성

Android 1.0부터 알림 시스템 UI와 알림 관련 API는 꾸준히 발전했습니다. 구형 기기를 지원하면서도 최신 알림 API 기능을 사용하려면 지원 라이브러리 알림 API(NotificationCompat과 하위 클래스) 및 NotificationManagerCompat을 사용하세요. 이들 API는 API 레벨을 확인하기 위한 조건부 코드를 대신 작성해주기 때문에 개발자가 작성할 필요가 없습니다.

NotificationCompat은 이후 플랫폼에 최신 메서드가 포함될 때 업데이트됩니다. NotificationCompat에서 메서드를 사용할 수 있다 하더라도 해당 기능이 구형 기기에 제공된다는 보장은 없습니다. 어떤 경우에는 새로 도입된 API를 호출해도 구형 기기에서 작동하지 않을 수 있습니다. 예를 들어 NotificationCompat.addAction()은 Android 4.1(API 레벨 16) 이상을 실행하는 기기에서만 액션 버튼을 표시합니다.

다음은 Android 알림에서 가장 눈에 띄는 동작 변경사항을 요약한 것입니다.

Android 4.1, API 레벨 16

  • 확장형 알림 템플릿(알림 스타일이라고 함)을 도입하여 더 큰 알림 콘텐츠 영역에서 정보를 표시할 수 있게 되었습니다. 사용자는 한 손가락으로 위/아래 스와이프 동작을 사용하여 알림을 펼칠 수 있습니다.
  • 버튼 형태로 더 많은 액션을 알림에 추가할 수 있는 기능도 도입되었습니다.
  • 사용자가 설정에서 각 앱의 알림을 끌 수 있는 기능이 추가되었습니다.

Android 4.4, API 레벨 19 및 20

  • 알림 리스너 서비스가 API에 추가되었습니다.
  • Android Wear(현재는 Wear OS라고 함)에 대한 지원이 API 레벨 20에 추가되었습니다.

Android 5.0, API 레벨 21

  • 잠금 화면과 헤즈업 알림이 도입되었습니다.
  • 이제 사용자가 전화를 방해 금지 모드로 설정하고 기기가 우선순위만 허용 모드일 때 어떤 알림을 표시하도록 허용할지 구성할 수 있습니다.
  • API에 추가된 메서드는 알림을 잠금 화면에 표시할지 여부(setVisibility())를 설정하고 알림 텍스트의 "공개" 버전을 지정합니다.
  • 시스템에 알림이 사용자를 "방해하는 수준"을 알려주는 setPriority() 메서드가 추가되었습니다(예: 높게 설정하면 알림 영역이 헤즈업 알림으로 변경됨).
  • 알림 스택 지원이 Android Wear(현재는 Wear OS라고 함) 기기에 추가되었습니다. setGroup()을 사용하여 알림을 스택에 넣습니다. 알림 스택은 아직 태블릿이나 전화기에서 지원되지 않습니다. 추후에 알림 스택은 그룹 또는 번들로 부를 예정입니다.

Android 7.0, API 레벨 24

  • 히어로 이미지와 아바타를 강조하도록 알림 템플릿의 스타일이 변경되었습니다.
  • 세 가지 알림 템플릿이 추가되었습니다. 하나는 메시지 앱에 사용하고 나머지 두 개는 확장형 어포던스 및 기타 시스템 장식으로 맞춤 콘텐츠 뷰를 장식하는 데 사용합니다.
  • 핸드헬드 기기(전화기 및 태블릿)에 알림 그룹에 대한 지원이 추가됩니다. Android 5.0(API 레벨 21)에서 도입된 Android Wear(현재는 Wear OS라고 함) 알림 스택과 동일한 API를 사용합니다.
  • 사용자는 인라인 답장을 사용하여 알림 내부에서 직접 답장할 수 있습니다(텍스트를 입력하면 알림의 상위 앱으로 라우팅됨).

Android 8.0, API 레벨 26

  • 이제 각 알림을 각 채널에 할당해야 합니다.
  • 사용자가 앱에서 모든 알림을 끄지 않고도 채널별로 알림을 끌 수 있습니다.
  • 활성 상태의 알림이 있는 앱은 홈/런처 화면에서 앱 아이콘 위에 알림 "배지"를 표시합니다.
  • 이제 사용자는 창에서 알림을 일시 중지할 수 있습니다. 알림의 자동 시간 초과를 설정할 수 있습니다.
  • 알림의 배경색도 설정할 수 있습니다.
  • 알림 동작과 관련된 일부 API가 Notification에서 NotificationChannel로 이동되었습니다. 예를 들어 Android 8.0 이상에는 NotificationCompat.Builder.setPriority() 대신 NotificationChannel.setImportance()를 사용합니다.