사용자 및 대화

사용자 및 대화 이니셔티브는 휴대전화 시스템에서 사용자 및 대화를 돋보이게 표시하는 것을 목표로 하는 다년간의 Android 이니셔티브입니다. 이러한 우선순위는 다른 사람과의 소통 및 상호작용이 모든 연령층에 걸쳐 대다수 사용자에게 여전히 가장 가치 있고 중요한 기능 영역이라는 사실을 기반으로 합니다.

Android 11에는 사람 및 대화 이니셔티브를 지원하기 위해 다양한 기능이 도입되었습니다.

대화 공간


대화 공간은 사람 간의 실시간 대화를 위한 전용 알림 영역입니다.
그림 1: 대화 공간

휴대기기에서는 알림 창 상단에 사용자와의 실시간 대화 (예: 그룹 채팅을 비롯한 통화 및 채팅 메시지)만 포함하는 별도의 섹션이 있습니다. 많은 휴대전화에서 이 공간의 알림은 비대화 알림과는 다르게 표시되고 작동합니다.

  • 차별화된 디자인으로, 사람을 나타내는 아바타를 강조하면서 해당 대화가 실행 중인 앱을 보여줍니다.
  • 알림을 탭하면 앱에서 대화가 열리고(또는 대화가 이전에 대화창이었다면 대화창으로 표시됨), 캐럿을 탭하면 알림 창에서 새 메시지가 전체 길이로 확장되며 전체 옵션 목록이 표시됩니다.
  • 다음과 같이 대화와 관련된 작업이 제공됩니다 (일부는 길게 누름).
    • 이 대화를 우선순위로 표시
    • 이 대화를 대화창으로 올리기(앱에서 대화창을 지원하는 경우에만 표시됨)
    • 이 대화에 관한 알림 무음 설정
    • 이 대화의 맞춤 알림음 또는 진동 설정

대화창의 대화

알림이 대화 요구사항을 충족하면 플랫폼은 알림 창에서 알림을 대화창으로 실행합니다.
그림 2: 알림 창에서 도움말 풍선으로 실행되는 알림

Android 11부터 대화 섹션의 알림에서 대화창을 시작할 수 있습니다. 연결된 바로가기가 있는 알림만 대화창으로 표시될 수 있습니다. 중요한 대화로 표시되거나 알림창에서 대화창으로 표시되도록 대화를 트리거하는 경우 대화가 대화창으로 자동 표시됩니다.

대화 바로가기

대화 바로가기는 런처에 표시되며 공유 시트에서 오래 지속되는 공유 바로가기와 함께 표시됩니다.

API 가이드라인

이 섹션에서는 사용자와 대화를 표시하는 시스템 제공 공간에 대한 지원을 앱에 추가하는 API를 설명합니다.

대화 바로가기

이 새로운 대화 중심 이니셔티브에 참여하려면 앱이 오래 지속되는 바로가기를 시스템에 제공해야 합니다. 오래 지속되는 공유 바로가기를 사용하는 것이 좋습니다. 필요한 경우 Android 11에서 동적 바로가기를 사용할 수 있지만, 이 옵션은 향후 삭제될 수 있습니다.

대화 바로가기를 게시하려면 ShortcutManagerCompat 메서드 setDynamicShortcuts(), addDynamicShortcuts() 또는 pushDynamicShortcut()을 호출합니다(이러한 메서드는 개발자를 위해 바로가기 제한을 자동으로 관리함). 이 바로가기는 오래 지속되어야 하며 한 명 이상의 사람에 관한 Person 데이터가 연결되어 대화의 다른 참여자를 식별할 수 있어야 합니다. 또한 LocusIdCompat을 설정하는 것이 좋습니다.

대화가 더 이상 존재하지 않으면 앱은 removeLongLivedShortcuts()를 사용하여 바로가기를 삭제할 수 있습니다. 이렇게 하면 시스템에서 대화와 관련된 모든 데이터가 삭제됩니다. 바로가기는 삭제할 수 있지만, 꼭 필요한 경우가 아니면 앱에서 캐시된 바로가기를 삭제해서는 안 됩니다. 사용자가 바로가기와 상호작용하여 환경을 변경했기 때문에 바로가기가 캐시될 수 있으며, 바로가기를 삭제하면 변경사항이 실행취소되어 사용자가 불편을 겪을 수 있습니다.

대화 알림

다음 조건을 충족하는 경우 알림은 대화 알림으로 간주됩니다.

  • 알림에서 MessagingStyle을 사용합니다.

  • (앱이 Android 11 이상을 타겟팅하는 경우에만) 알림이 오래 지속되는 유효한 동적 또는 캐시된 공유 바로가기와 연결됩니다. 알림은 setShortcutId() 또는 setShortcutInfo()를 호출하여 이 연결을 설정할 수 있습니다. 앱이 Android 10 이하를 타겟팅하는 경우 대체 옵션 섹션에 설명된 대로 알림을 바로가기에 연결하지 않아도 됩니다.

  • 사용자가 게시 시점에 알림 채널 설정을 통해 대화 섹션에서 대화 순위를 내리지 않았습니다.

LocusIdCompat 사용

기기 내 인텔리전스는 사용자가 관심을 가질 가능성이 가장 큰 대화를 결정합니다. 가장 중요한 신호 중 두 가지는 각 대화에서 대화 세션의 최근 사용빈도입니다. 상호작용이 적절하게 태그된 경우 시스템은 런처 바로가기에서 또는 알림 내에서 이루어진 대화와의 상호작용에 관해 알고 있습니다. 하지만, 시스템은 앱에서 이러한 상호작용이 태그되지 않는 한 완전히 앱에서 발생한 대화에 관해 알지 못합니다. 따라서 LocusIdCompat를 바로가기에 연결하고 연결된 LocusIdCompat로 인앱 활동 또는 프래그먼트에 주석을 지정하는 것이 좋습니다. LocusIdCompat을 사용하여 추천 시스템에서 대화의 순위를 적절하게 지정하고 시스템이 사용자와 대화의 마지막 상호작용(인앱 상호작용 포함) 시간을 올바르게 표시하도록 설정할 수 있습니다. setShortcutInfo()를 사용하여 대화를 바로가기와 연결하면 대화 시스템은 적절한 LocusIdCompat을 자동으로 연결합니다.

Android 10 이하를 타겟팅하는 앱의 대화 공간 요구사항

앱이 Android 11을 타겟팅하지 않는 경우에도 메시지가 대화 공간에 계속 표시될 수 있습니다. 단 앱이 특정 요구사항을 충족해야 합니다. 이 섹션에서는 이러한 앱의 요구사항 및 앱이 요구사항을 충족하지 않는 경우의 대체 동작을 설명합니다.

메시지 공간에 참여하기 위한 핵심 요구사항은 앱이 MessagingStyle 알림을 구현하는 것과 알림을 게시할 때 알림은 게시된 알림에서 오래 지속되는 바로가기를 참조해야 한다는 것입니다. 이러한 요구사항을 충족하는 알림은 다음 동작과 함께 대화 공간에 표시됩니다.

  • 알림이 대화 스타일로 표시됨
  • 대화창 버튼이 제공됨(구현된 경우)
  • 대화 관련 기능이 인라인으로 제공됨

알림이 이러한 요구사항을 충족하지 않으면 플랫폼에서 대체 옵션을 사용하여 알림 형식을 지정합니다. 알림이 대체 사례 중 하나의 요구사항을 충족하면 알림은 대화 공간에 특수한 형식으로 표시됩니다. 알림이 어떤 대체 옵션에도 적합하지 않으면 대화 공간에 표시되지 않습니다.

대체: MessagingStyle을 사용하지만 바로가기가 제공되지 않은 경우

앱이 Android 10 이하를 타겟팅하고 알림이 MessagingStyle을 사용하지만 메시지를 바로가기와 연결하지 않는다면 알림은 다음 동작과 함께 대화 공간에 표시됩니다.

  • 알림이 대화 스타일로 표시됨
  • 제공되는 대화창 버튼 없음
  • 인라인으로 제공되는 대화 관련 기능 없음

대체: MessagingStyle을 사용하지 않지만 앱이 인식된 메시지 앱인 경우

알림이 MessagingStyle을 사용하지 않지만 플랫폼에서 앱을 메시지 앱으로 인식하고 알림의 category 매개변수가 msg로 설정되었다면 알림은 다음 동작과 함께 대화 공간에 표시됩니다.

  • 알림이 Android 11 이전 스타일로 표시됨
  • 제공되는 대화창 버튼 없음
  • 인라인으로 제공되는 대화 관련 기능 없음

가이드, 사용 및 테스트

이 섹션에서는 대화 기능을 사용하고 테스트하는 방법에 관한 일반적인 가이드를 제공합니다.

언제 대화를 사용해야 하나요?

대화 알림 및 관련 바로가기는 실시간 대화의 사용자 환경을 개선하기 위한 것입니다. 예를 들어 SMS, 문자 채팅 및 전화 통화는 사용자가 신속하게 의사소통하기를 기대하는 실시간 대화입니다. 사용자는 대화와 관련이 없는 이메일 및 활동에 이러한 기대를 하지 않습니다.

따라서 사용자가 적절하지 않다고 느끼는 경우 대화 섹션에서 특정 대화를 삭제할 수 있는 기능이 사용자에게 제공됩니다.

권장사항

참여도를 높이고 앱을 기반으로 한 사용자 및 대화와 더 쉽게 상호작용할 수 있도록 하려면 다음 권장사항을 따르는 것이 좋습니다.

  • 부재중 전화가 우선순위 대화 창에 표시되고 대화 위젯에 올바르게 표시되도록 하려면 부재중 전화 알림의 형식을 카테고리가 CATEGORY_MISSED_CALL로 설정된 conversations로 지정합니다.
  • 사용자에게 고품질 아바타(104dp)를 제공합니다. 그러지 않으면 시스템은 사용자의 이니셜을 사용하기 때문에 사용자 참여도가 낮아집니다.
  • 사용자가 메시지를 확인하기 전에 대화 알림을 cancel하면 안 됩니다. 이러한 예 중 하나는 사용자가 메시지를 볼 수 없거나 처리할 수 없는 뷰에서 앱을 열 때 알림을 취소하는 경우입니다. 사용자가 메시지를 읽거나 처리할 기회를 얻지 못하면 취소된 알림 및 관련 대화창이 삭제되어 대화 컨텍스트가 손실됩니다.
  • 메시지와 관련된 MIME 관련 메타데이터의 data URI를 제공합니다. 이를 통해 알림과 관련하여 더 풍부한 환경을 제공할 수 있습니다.
  • Android 12 status API를 사용하여 대화 위젯의 참여도를 더 높여보세요.
  • 대화 바로가기에 다음 권장사항을 적용합니다.
    • 알림을 푸시하지 않는 수신 및 발신 인앱 대화 바로가기를 게시합니다. 동일한 대화의 수신 및 발신 메시지의 바로가기 ID는 동일해야 합니다. pushDynamicShortcut()를 사용하여 바로가기와 보고서 사용량을 게시합니다.
    • 바로가기 아바타가 의도치 않게 잘리는 것을 방지하려면 바로가기 아이콘에 AdaptiveIconDrawable을 제공합니다. 자세한 내용은 바로가기 이미지 제공을 참고하세요.
    • 시스템에서 바로가기 사용을 촉진하는 데 도움이 되도록 최고 순위 가이드라인을 준수합니다. 바로가기가 공유 바로가기인 경우 Android Sharesheet를 비롯하여 다양한 시스템 표시 경로에서 순위가 지정됩니다.
    • 대화 바로가기 intents가 관련 대화로 직접 실행되는지 확인합니다.
    • compat libs를 사용하여 conversation 관련 단축키로 편리하게 설정할 수 있습니다.

대화 알림 및 바로가기 테스트

대화를 길게 누르면 대화 관련 작업 메뉴가 열립니다.
그림 3: 대화 알림을 길게 누르고 대화 메뉴가 표시되는지 확인하여 대화 알림이 올바르게 구성되었는지 확인할 수 있습니다.

대화 공간 가이드라인을 따르면 대화가 대화 공간에 자동으로 표시됩니다. 알림을 길게 눌러 바로가기가 적절하게 통합되었는지 확인할 수 있습니다. 통합이 올바르게 완료되면 UI에 대화 관련 작업이 표시됩니다. 알림이 바로가기에 연결되어 있지 않으면 UI에서 대화 기능을 지원하지 않음을 나타내는 텍스트를 표시합니다.

앱 런처를 길게 누르면 추가된 바로가기가 표시됩니다. 바로가기를 통해 앱 내에서 올바른 위치로 이동하는지 테스트해야 합니다.

공유 바로가기가 수신할 수 있는 콘텐츠를 공유할 때 추가된 공유 바로가기가 Sharesheet의 직접 공유 행에 표시됩니다.

대화 위젯

대화 위젯에 표시된 대화
그림 1: 대화 위젯에 표시된 대화

Android 12의 대화 위젯 기능은 Android 11에 도입된 사용자 및 대화 기능을 기반으로 합니다. 이를 통해 앱이 대화 위젯에 대화 상태를 표시할 수 있습니다.

대화 위젯은 사용자가 홈 화면에서 채팅을 쉽게 열 수 있도록 하여 사용자 상호작용을 촉진합니다. 이 위젯은 사용자가 대화 상태 또는 기타 관련 정보의 스니펫을 표시하면서 사용자가 효율적으로 대화로 돌아갈 수 있도록 하는 향상된 바로가기입니다.

앱이 대화 위젯을 지원하는지 확인

앱이 대화 위젯을 지원하는지 확인하려면 최소 두 개의 Android 기기(모두 Android 12 실행)가 있어야 하며 두 개의 사용자 계정(기기마다 하나씩)으로 메시지를 교환해야 합니다. 이 절차를 설명하기 위해 계정을 각각 '사용자 A'와 '사용자 B'라고 하겠습니다.

새 대화 위젯을 추가하는 위젯 선택 도구 UI
그림 2: 새 대화 위젯을 추가하는 위젯 선택 도구 UI

다음 단계를 완료합니다.

  1. 사용자 A의 기기에서 런처를 길게 누릅니다. 위젯 선택 도구에서 그림 2와 같이 대화의 새 위젯을 탭합니다.
  2. 위젯을 홈 화면으로 드래그합니다. 사용자 A의 앱에서 활성 대화 또는 최근 대화 목록을 선택할 수 있어야 합니다.
  3. 이제 사용자 B의 기기에서 사용자 A에게 테스트 메시지를 보냅니다.
  4. 사용자 A의 기기로 돌아와서, 사용자 B가 보낸 메시지의 알림을 반영하도록 위젯이 업데이트되었는지 확인합니다.
  5. 선택사항: 사용자 A와 사용자 B가 대화를 서로 다른 상태 값으로 설정하여 위젯이 이를 적절하게 반영하도록 합니다. 상태 값 목록은 ConversationStatus를 참고하세요.