알림(Notifications)

알림 시스템은 대화 앱에 새로운 메시지가 도착했거나 캘린더에 이벤트가 있을 때와 같은 상황에서 여러분의 앱이 중요한 이벤트를 사용자에게 통보할 수 있도록 해 줍니다.

간결하고 쾌적하면서도 정중한 느낌을 주는 앱을 만들기 위해 알림을 주의 깊게 디자인하는 것이 중요합니다. 알림은 앱의 목소리와도 같고, 앱에 개성 또한 부여합니다. 원하지도 않고 중요하지도 않은 알림은 사용자를 짜증나게 할 수 있으므로 신중하게 사용해주세요.

알림을 표시해야 할 때

사람들에게 사랑 받는 애플리케이션을 만들려면, 사용자의 주의와 시선은 보호해야 할 리소스 임을 인식하는 것이 중요합니다. 소프트웨어 개발자가 이해할 수 있는 표현을 빌리자면, 사용자는 어떤 값을 바로 반환받기 위해 호출할 수 있는 메소드가 아닙니다. 사용자의 시선을 스레드 리소스에 빗대자면, 알림을 생성하면 잠깐 사용자 스레드를 중단하고 그것을 처리해야만 방해했던 알림이 사라지는 것입니다.

안드로이드 알림 시스템은 사용자가 작업에 집중하는 동안에도 빠르게 이벤트를 통지할 수 있도록 디자인했지만 여전히 알림을 생성할지 판단할 때 양심적이 될 필요가 있습니다.

잘 만들어진 앱은 요청하지 않았지만 어쩔 수 없이 사용자를 방해해야 하는 한정된 경우에만 알림을 표시합니다.

알림은 주로 시간 기반 이벤트에 사용해야 하며, 특히 다른 사람과 엮인 동시적 이벤트(synchronous events)인 경우 더욱 그러합니다. 예를 들어, 채팅 메시지를 받는 것은 실시간 동시적 커뮤니케이션입니다: 다른 사용자가 응답을 기다리는 중이라구요. 알림을 사용해 사용자가 주의를 기울이도록 해야 할 또다른 좋은 예로 캘린더 이벤트가 있습니다. 왜냐면 해당 이벤트가 임박했으며, 캘린더 이벤트는 종종 다른 사람과 엮여 있기 때문입니다.

 

알림을 표시해선 안될 때

알림을 사용하지 말아야 할 몇가지 상황이 있습니다:

  • 사용자에게 꼭 알려야 할 정보도 아니고 긴급하지도 않은 정보라면 알려주지 마세요. 예를 들어 소셜 네트워크와 같이 비동시적이고 대상도 불분명한 많은 양의 업데이트 정보는 실시간으로 사용자를 방해하는 것이 허락되지 않습니다.

  • 관련된 새 정보가 현재 화면에 바로 나타나는 경우라면 알림을 만들지 마세요. 대신 현재 애플리케이션 UI에 컨텍스트 내에 새로운 정보가 있음을 사용자에게 바로 알려주세요. 예를 들어 대화 애플리케이션은 사용자가 다른 사용자와 대화 중일 때는 시스템 알림을 생성하지 않아야 합니다.

  • 사용자가 개입하지 않아도 시스템 스스로 알아서 처리할 수 있다면 저장 중, 동기화 중, 애플리케이션을 업데이트하는 중 등의 저수준 기술 정보로 사용자를 방해하지 마세요.

  • 굳이 어떤 명령을 내리지 않아도 애플리케이션이 스스로 알아서 빠르게 문제에서 벗어날 수 있다면 오류를 알려 사용자를 방해하지 마세요.

  • 사용자가 스스로 시작하거나 멈출 수 없는 서비스에는 알림을 사용하지 마세요.

  • 단지 브랜드를 알리기 위한 불필요한 알림은 만들지 마세요. 그런 알림은 그저 사용자를 불만스럽게 만들어 고객을 잃게 만들 뿐입니다. 애플리케이션의 사용자에게 소량의 최신 정보를 제공하면서도 지속적으로 관심을 갖게 만드는 최고의 방법은 홈 화면에 배치하고 싶은 위젯을 개발하는 것입니다.

디자인 가이드라인

개인화 하세요

다른 사용자의 (메시지나 상태 업데이트와 같은) 내역을 알릴 때 사용자 이미지를 포함하세요.

앱 아이콘은 알림에서 두번째 아이콘으로 포함된다는 걸 기억하세요. 따라서 여전히 사용자는 어떤 앱이 알림을 표시하는지 분간할 수 있습니다.

올바른 곳으로 탐색하세요

사용자가 알림을 터치하면 알림에서 표시하는 자료를 바로 확인해 처리할 수 있는 곳에서 앱을 열도록 해주세요. 대부분 (메시지와 같은) 단일 자료 항목을 표시하는 상세 뷰를 열겠지만, 알림이 중첩되어(아래 중첩된 알림 참조) 여러 항목을 참조하는 경우 요약 뷰를 열 수도 있을 것입니다. 이 때 사용자가 앱의 탑 레벨 내의 계층 레벨에 도착한다면, 시스템 백 키로 앱의 최상위로 이동할 수 있도록 앱의 백 스택에 이동 경로를 삽입해주세요. 더 자세한 정보는 탐색 디자인 패턴의 시스템에서 앱으로 이어지는 탐색 장에서 볼 수 있습니다.

시간 기반 이벤트의 알림 시간(timestamp)

기본적으로 표준 안드로이드 알림은 우상측에 알림이 발생한 시간을 표시합니다. 알림에서 이러한 시간 표시가 유용한지 검토해주세요. 만약 시간 표시가 불필요하다면 해당 이벤트가 사용자의 주의를 끌기 위해 알림으로 표시해야 할 중요한 이유가 충분히 있는지 고려해주세요. 만약 알림이 정말 중요하다면 이제 다시 시간을 표시하지 않아도 괜찮을지 검토하도록 합시다.

사용자가 얼마 전에 알림이 발생했는지 알아야 하는 경우라면 알림 시간을 포함해 주세요. 알림 시간 표시의 좋은 사례로 커뮤니케이션 통지(이메일, 메시징, 대화, 보이스 메일)가 있습니다. 사용자가 메시지의 맥락을 이해하거나 어떤 응답을 해야 하는 경우 시간 정보가 필요할 수 있습니다.

알림을 중첩시켜주세요

알림이 계류(pending) 상태인데 동일한 타입의 새로운 알림을 추가로 표시해야 할 경우라면 완전히 새로운 알림 객체를 생성하는 것은 피해주세요. 그 대신 알림을 중첩시켜 주세요.

중첩 알림은 사용자가 특정 종류의 알림이 얼마나 많이 계류 중인지 간단한 개요를 표시합니다.

이러지 마세요:

이렇게 하세요:

개요 및 세부 정보를 각각 다른 화면에 표시하고 있는 경우에는 누적 알림은 하나의 알림으로 표시할 때와는 다른 화면을 열어야 할 수도 있습니다.

예를 들어 한 개의 이메일 알림은 언제나 해당 이메일 내용을 열지만, 누적 이메일 알림은 받은 편지함 뷰를 엽니다.

일이 끝났다면 알아서 사라지세요

캘린더 이벤트와 같이 어떤 알림은 특정한 때에만 이벤트가 발생을 했음을 사용자에게 통지합니다. 그 때가 지나면 해당 알림은 사용자에게는 더 이상 중요하지 않을테니 알림을 자동으로 지우는 것을 고려해보세요. 활성화된 대화 메시지나 이미 들은 보이스 메일 역시 마찬가지로 사용자가 일부러 해당 알림을 직접 지우지 않아도 알아서 지워지게 해야 할 것입니다.

 

알림 내용을 엿볼 수 있게 하세요

선택적인 티커 텍스트(ticker text)로 알림 내용의 짧은 맛보기를 제공할 수 있습니다. 티커 텍스트는 시스템에 알림이 추가될 때 짧은 시간 동안 표시된 후 자동으로 감춰집니다.

알림을 선택 사항으로 만들어주세요

사용자는 언제나 알림을 제어할 수 있어야 합니다. 애플리케이션 설정에 알림 설정을 추가해 사용자가 알림을 끌 수 있도록 허용하세요.

구별되는 아이콘을 사용하세요

사용자가 알림 영역을 흘끔 보는 것만으로 현재 어떤 알림 타입이 계류 중인지 확인할 수 있도록 하세요.

이렇게 하세요:

  • 기존 안드로이드 앱이 이미 제공하고 있는 알림 아이콘들을 살펴보고 보기에 확연히 구별되는 알림 아이콘을 만드세요.

이러지 마세요:

  • 다른 앱과 구별 짓는다고 색상을 사용하지는 마세요. 일반적으로 알림 아이콘은 단색이어야 합니다.

알림과 상호 작용

알림은 알림 영역의 아이콘으로 식별되며 알림 서랍을 열어 접근할 수 있습니다.

서랍 내에서 알림을 발생 시간 순으로 정렬하며 최근 알림을 가장 윗쪽에 배치합니다. 특정 알림을 터치하면 연관된 알림에 맞는 자세한 내용을 표시하는 앱을 엽니다. 알림을 좌나 우로 스와이프해 서랍에서 알림을 지울 수 있습니다.

타블렛에서는 알림 영역이 화면 아래 시스템 바에 통합되어 있습니다. 알림 영역 내 아무 곳이나 터치하면 알림 서랍이 열립니다.

진행 중 알림

진행 중 알림은 백그라운드로 진행 중인 작업을 사용자에게 알려줍니다. 예를 들어 뮤직 플레이어는 알림 시스템 내에 현재 재생 중인 트랙을 사용자가 재생을 멈출 때까지 계속 표시합니다. 진행 중 알림은 파일을 다운로드 하거나 비디오를 인코딩하는 등의 긴 작업을 할 때 사용자에게 피드백하기 위해 사용할 수 있습니다. 진행 중 알림은 알림 서랍 내에서 임의로 제거될 수 없습니다.

대화 상자와 토스트는 피드백이지 알림이 아니에요

해당 화면 내에 있는 경우가 아니라면 앱은 대화 상자나 토스트를 생성해서는 안됩니다. 대화 상자 및 토스트는 앱 내에서 사용자가 어떤 명령을 내렸을 때 바로 응답하는 경우에만 표시해야 합니다. 예를 들어 대화 상자는 사용자에게 특정 명령의 심각성을 이해했는지 확인하는 용도로 사용할 수 있습니다. 토스트는 특정 명령을 성공적으로 끝냈다고 응답할 때 사용할 수 있습니다.