실시간 업데이트 알림 만들기

실시간 소식은 중요한 업데이트의 요약을 제공하므로 사용자는 앱을 열지 않고도 진행 상황을 추적할 수 있습니다. 시스템은 실시간 소식 알림을 승격하지만 사용자는 실시간 소식 알림을 일시적으로 닫거나 표준 알림으로 강등할 수 있습니다. 승격된 알림은 알림 창 상단, 잠금 화면, 상태 표시줄의 칩 등 시스템 표시 경로에 더 눈에 띄게 표시됩니다. 실시간 소식 알림은 간결하고 시의적절하며 관련성 있는 정보를 제공하기 위한 알림 원칙을 따라야 합니다.

그림 1. 실시간 소식 알림의 예

프로모션 알림 카드의 모양 특성은 다음과 같습니다.

  • 기본적으로 펼쳐짐
  • 접을 수 없음

알림이 실시간 소식으로 인정되려면 다음 요구사항을 충족해야 합니다.

프로모션 특성

다음 API는 시스템에서 알림을 승격할지 여부를 결정하는 데 도움이 됩니다.

  • Notification.FLAG_PROMOTED_ONGOING은 알림이 승격되었는지 여부를 나타냅니다.
  • Notification.hasPromotableCharacteristics()는 시스템이 알림을 승격할 수 있는지 검증합니다. 이 메서드는 사용자가 설정에서 앱의 실시간 소식을 사용 중지했는지 여부를 고려하지 않습니다.
  • NotificationManager.canPostPromotedNotifications()는 앱이 프로모션 알림을 게시할 수 있는지 확인합니다(예: 사용자가 설정에서 사용 설정 또는 사용 중지했는지 여부).
  • Settings.ACTION_MANAGE_APP_PROMOTED_NOTIFICATIONS는 앱이 사용자를 설정으로 보내 이 기능을 사용 설정할 수 있도록 하는 인텐트 작업입니다.

사용 기준

진행 중이고 사용자가 시작하며 시간에 민감한 활동에 실시간 소식을 사용합니다.

그림 2. 홈 화면과 잠금 화면에 실시간 소식이 칩으로 표시됩니다.

진행 중

실시간 소식은 시작과 끝이 명확하고 현재 진행 중인 활동을 나타내야 합니다. 활동이 과거에 발생한 경우 실시간 소식을 사용하지 마세요. 대신 표준 알림을 사용하세요. 아직 시작되지 않은 이벤트도 마찬가지입니다. 단, 곧 시작될 이벤트는 실시간 업데이트를 사용할 수 있습니다.

실시간 소식은 진행 중인 활동을 나타냅니다. 실시간 소식을 사용하여 앱 기능에 대한 빠른 액세스를 제공하지 마세요. 이렇게 하려면 앱 위젯이나 맞춤 빠른 설정 타일을 사용하세요.

  • 적절한 사용: 활성 탐색, 진행 중인 전화 통화, 활성 차량 공유 추적, 활성 음식 배달 추적
  • 부적절한 사용: 광고, 프로모션, 채팅 메시지, 알림, 예정된 캘린더 일정, 앱 기능에 대한 빠른 액세스

사용자의 설정에 의해 사용 시작

대부분의 실시간 소식은 운동 시작, 운전 내비게이션 시작, 차량 공유 호출과 같이 사용자가 명시적으로 트리거하는 활동을 나타내야 합니다. 사용자의 환경, 관심분야, 예정된 일정과 같은 주변 정보를 실시간 소식에 표시하지 마세요. 다른 당사자가 트리거한 활동이 실시간 소식을 생성하도록 허용하지 않습니다.

사용자가 향후 특정 시점에 활동을 시작하는 작업을 실행하는 경우가 있습니다. 예를 들어 사용자가 항공편이나 콘서트 티켓을 구매하거나, 토너먼트에 등록하거나, 시간에 민감한 이벤트에 향후 참석할 것임을 나타내는 경우입니다. 이러한 경우 예약된 이벤트가 시작될 때 실시간 소식을 자동으로 표시하는 것이 적절할 수 있습니다. 그러나 앱은 활동이 임박한 경우에만 표시되도록 트리거를 조정해야 합니다. 사용자가 스포츠 경기와 같은 백그라운드 이벤트 모니터링을 시작하고 싶다고 명시적으로 표시하면 해당 이벤트의 실시간 소식을 게시할 수 있습니다. 하지만 연결된 알림에 고정 해제 작업도 포함해야 합니다.

시급한 내용

활동 전반에 걸쳐 사용자의 주의가 필요한 경우에만 실시간 업데이트를 표시합니다. 실시간 소식의 주요 사용 사례는 모니터링입니다. 사용자는 실시간 소식을 한눈에 확인하여 활동의 진행 상태를 모니터링함으로써 상당한 이점을 얻을 수 있습니다.

실시간 소식은 실시간 소식과 일반 알림 간에 전환되는 활동에 적합한 경우가 많습니다. 예를 들어 탑승권 알림은 사용자의 항공편 출발 몇 시간 전에 표시하는 것이 적절하지만, 사용자가 공항이나 장소에 도착했거나 탑승이 시작된 경우와 같이 긴급한 필요가 있는 경우에만 알림이 실시간 소식이 되어야 합니다. 반면, 사용자가 지속적으로 모니터링할 필요가 없으므로 실시간 소식은 배송 추적에 적합하지 않습니다.

UX 권장사항

추적기 아이콘을 사용하여 상태를 시각화합니다. 이 값은 동적으로 업데이트할 수 있습니다.

진행률 표시줄의 맞춤 추적기
그림 3. 맞춤 트래커 아이콘

ETA가 계산 중이거나 아직 사용할 수 없는 경우 빈 상태를 표시하지 않습니다. 예시와 같이 시스템이 작동 중임을 나타내는 '생각 중…' 또는 '경로 변경 중…'과 같은 활성 자리표시자 텍스트를 제공합니다.

nonempty state to show thinking
그림 4. 실시간 소식의 비어 있지 않은 상태입니다.

상태 칩

상태 칩을 사용하면 알림이 표시되지 않을 때 사용자가 실시간 소식을 추적할 수 있습니다. setShortCriticalText 또는 setWhen를 사용하여 진행 상황 중심 알림에 관한 중요한 상태 정보를 전달합니다.

아이콘이 있는 상태 칩
그림 5. 불확정 상태는 작은 아이콘 Notification.Builder#setSmallIcon을 표시합니다.
시간이 표시된 상태 칩
그림 6. Notification.Builder#setShortCriticalText을 사용하여 절대 시간을 표시합니다.
정보가 포함된 상태 칩
그림 7. Notification.Builder#setShortCriticalText를 사용하여 중요한 정보를 전달합니다.

시간

알림이 닫히거나 업데이트되지 않는 한, when 시간은 알림의 수명에 대한 카운트다운을 트리거합니다. 다음 글머리기호는 다양한 상황에서 시간이 작동하는 방식을 설명합니다.

  • 시간이 최소 2분 이후인 경우: 현재 시간이 오전 10시 5분이고 시간이 오전 10시 10분으로 설정된 경우 칩에 5분이라고 표시됩니다.
  • 시간이 과거인 경우: 텍스트가 표시되지 않습니다.
  • 시간에 Chronometer를 사용할 때 칩에 타이머를 표시할 수 있습니다. setUsesChronometer 및 setChronometerCountdown을 참고하세요. Chronometer 타이머는 양수인 경우 칩에 표시됩니다.
  • 알림에 시간이 표시되지 않도록 하려면 setShowWhen를 FALSE로 설정합니다.

상태 칩 모양

상태 칩에는 항상 아이콘이 포함되며 선택적으로 텍스트가 포함됩니다. 칩의 최대 너비는 96dp입니다. 텍스트는 전체 텍스트가 칩에 들어갈 수 있는 경우에만 표시됩니다. 텍스트는 다음 기준에 따라 표시됩니다.

  • 7자 미만인 경우 전체 텍스트를 표시합니다.
  • 텍스트의 절반 미만이 표시되는 경우 아이콘만 표시합니다.
  • 텍스트의 절반 이상이 표시되는 경우 가능한 한 많은 텍스트를 표시합니다.

Wear OS

실시간 소식이 연결된 일부 Wear OS 기기에 브리지됩니다. 이 브리징 동작에 관한 안내와 Wear OS용 로컬 실시간 소식을 만드는 방법에 관한 안내는 Wear OS 실시간 소식 가이드를 참고하세요.

닫기

사용자는 알림 창에서 알림 표시 여부를 제어할 수 있습니다. 원치 않는 실시간 소식을 게시하면 사용자가 앱의 게시 권한을 취소할 수 있습니다.

사용자가 실시간 소식을 완전히 사용 중지하지 않도록 하려면 사용자가 무시할 수 있는 업데이트를 게시하지 마세요. 사용자가 닫은 실시간 소식을 다시 게시하지 않습니다. setDeleteIntent를 사용하여 업데이트가 무시되었는지 감지합니다.

이러한 API를 실험하려면 샘플 앱을 참고하세요.

FAQ

질문: 진행률 표시줄 끝에 있는 흰색 점은 무엇인가요?

진행률 접근성 시각화 표시기 끝
그림 8. 여정 종료 접근성 시각화

답변: 진행률 표시줄 끝에 있는 흰색 점은 진행률 표시줄의 끝을 시각적으로 표시합니다.

질문: 실시간 소식에 맞춤 알림이 지원되지 않는 이유는 무엇인가요?

답변: 맞춤 알림은 Android 버전과 기기 제조업체에 따라 동작이 크게 다르므로 일관된 테스트와 UX가 어렵습니다. RemoteViews를 사용하는 맞춤 알림을 피합니다.