알림 개요

알림은 사용자에게 미리 알림을 주고 다른 사람과의 소통을 가능하게 하며 앱에서 보내는 기타 정보를 적시에 제공하기 위해 Android가 앱의 UI 외부에 표시하는 메시지입니다. 사용자는 알림을 탭하여 앱을 열거나 알림에서 바로 특정 작업을 실행할 수 있습니다.

이 페이지에서는 알림이 표시되는 위치와 사용할 수 있는 기능을 간략하게 알아봅니다. 알림을 빌드하려면 대신 알림 만들기를 참고하세요.

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

기기에 표시되는 형식

알림은 상태 표시줄의 아이콘, 알림 창의 더 자세한 항목, 앱 아이콘의 배지, 페어링된 웨어러블 기기처럼 다양한 위치와 형식으로 사용자에게 자동 표시됩니다.

상태 표시줄 및 알림 창

알림을 보내면 먼저 상태 표시줄에 아이콘으로 표시됩니다.

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

사용자는 상태 표시줄에서 아래로 스와이프하여 알림 창을 열고 세부정보를 보거나 알림에서 작업할 수 있습니다.

그림 2. 알림 창의 알림

사용자는 창의 알림에서 아래로 드래그하여 상세 내용을 펼쳐볼 수 있으며, 여기에는 제공되는 경우 추가 콘텐츠와 작업 버튼이 표시됩니다.

알림은 앱 또는 사용자가 닫을 때까지 알림 창에 계속 표시됩니다.

헤드업 알림

Android 5.0부터는 헤드업 알림이라고 하는 플로팅 창에 알림을 간략히 표시할 수 있습니다. 이 동작은 일반적으로 사용자가 즉시 알아야 하는 중요한 알림에 사용되며 기기가 잠금 해제될 때만 표시됩니다.

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

헤드업 알림은 앱에서 알림을 보낸 순간 표시되어 잠시 후 사라지지만, 다른 알림과 마찬가지로 알림 창에는 계속 표시됩니다.

헤드업 알림을 트리거할 수 있는 조건을 예로 들면 다음과 같습니다.

  • 사용자의 활동이 전체 화면 모드인 경우(앱이 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 기기를 사용하는 경우 확장 가능한 세부정보와 작업 버튼을 포함한 모든 알림이 자동으로 페어링된 기기에 표시됩니다.

웨어러블 기기에 알림이 표시되는 방식을 맞춤설정하여 환경을 개선하고 추천 답장과 음성 입력 답장을 포함하여 다양한 작업을 제공할 수도 있습니다. 자세한 내용은 알림에 웨어러블 특정 기능을 추가하는 방법을 참고하세요.

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

알림 구성

알림의 디자인은 시스템 템플릿에 의해 결정되며, 앱에서는 템플릿의 각 부분에 해당하는 콘텐츠만 정의합니다. 알림의 일부 세부정보는 확장된 보기에서만 표시됩니다.

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

알림의 가장 일반적인 구성은 그림 7에 표시된 바와 같습니다.

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

모든 기기에서 적절한 디자인 호환성을 보장하도록 시스템 템플릿을 사용하는 것이 좋습니다. 그러나 필요하다면 맞춤 알림 레이아웃을 만들어도 됩니다.

이러한 기능으로 알림을 만드는 방법 등을 자세히 알아보려면 알림 만들기를 참고하세요.

알림 작업

필수는 아니지만 모든 알림은 탭했을 때 적절한 앱 활동이 실행되어야 합니다. 기본 알림 작업 외에도 그림 9에 표시된 것처럼 알림에서 앱 관련 작업을 완료(종종 활동을 실행하지 않고도 가능)하는 작업 버튼을 추가할 수 있습니다.

그림 9. 작업 버튼이 포함된 알림

Android 7.0(API 수준 24)부터는 알림에서 직접 메시지에 회신하거나 다른 텍스트를 입력하는 작업을 추가할 수도 있습니다.

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

작업 버튼 추가 방법은 알림 만들기에 자세히 설명되어 있습니다.

잠금 해제된 기기 요구

기기의 잠금 화면에 알림 작업이 표시될 수 있습니다. 특정 알림 작업으로 인해 앱이 활동을 실행하거나 직접 답장을 보내는 경우 사용자가 기기를 잠금 해제해야 앱에서 알림 작업을 호출할 수 있습니다.

Android 12(API 수준 31) 이상에서는 작업이 실행되는 워크플로에 관계없이 앱에서 작업을 호출하려면 기기를 잠금 해제하도록 알림 작업을 구성할 수 있습니다. 이 옵션을 사용하면 잠긴 기기의 알림에 보안 레이어를 추가할 수 있습니다.

앱에서 특정 알림 작업을 호출하기 전에 기기 잠금 해제를 요청하려면 다음 코드 스니펫에서와 같이 알림 작업을 만들 때 truesetAuthenticationRequired()에 전달합니다.

Kotlin

val moreSecureNotification = Notification.Builder(
        context, NotificationListenerVerifierActivity.TAG)
    .addAction(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build()

자바

Notification moreSecureNotification = new Notification.Builder(
        context, NotificationListenerVerifierActivity.TAG)
    .addAction(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build();

확장 가능한 알림

기본적으로 알림의 텍스트 콘텐츠는 한 줄에 맞춰 잘립니다. 알림을 더 길게 표시하고 싶은 경우 그림 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)부터는 앱에서 초당 한 번까지만 알림음을 울릴 수 있습니다. 앱에서 1초 동안 여러 알림을 게시하는 경우 알림이 모두 정상적으로 표시되지만 초당 첫 번째 알림만 알림음을 울립니다.

그러나 Android에서는 알림을 업데이트할 때 속도 제한도 적용합니다. 하나의 알림을 지나치게 자주 업데이트하면(1초 이내에 여러 번) 시스템에서 일부 업데이트를 중단할 수 있습니다.

알림 호환성

Android 1.0 이후로 알림 시스템 UI와 알림 관련 API가 계속해서 발전해왔습니다. 구형 기기를 지원하면서도 최신 알림 API 기능을 사용하려면 지원 라이브러리 알림 API(NotificationCompat과 하위 클래스) 및 NotificationManagerCompat을 사용하세요. 이 API를 사용하면 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에 추가되었습니다.
  • API 수준 20에 Android Wear(지금은 Wear OS라고 함) 지원이 추가되었습니다.

Android 5.0, API 수준 21

  • 잠금 화면 및 헤드업 알림이 도입되었습니다.
  • 사용자는 이제 휴대전화를 방해 금지 모드로 설정하고 기기가 우선순위 전용 모드일 때 사용자 방해를 허용할 알림을 구성할 수 있습니다.
  • 잠금 화면(setVisibility())에 알림을 표시할지와 알림 텍스트의 '공개' 버전을 지정하도록 설정하는 메서드가 API에 추가되었습니다.
  • 이 알림이 사용자를 '방해하는 정도'를 시스템에 알려주는 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()를 사용합니다.