사용자가 대화에 참여할 수 있도록 대화창 사용

대화창을 사용하면 사용자가 더 쉽게 대화를 보고 참여할 수 있습니다.

그림 1. 채팅 풍선

도움말 풍선은 알림 시스템에 내장되어 있습니다. 다른 앱 위에 플로팅됩니다. 사용자가 어디에 있든 팔로우할 수 있습니다. 사용자는 거품을 펼쳐서 앱 콘텐츠와 상호작용할 수 있으며, 펼쳐져 있지 않을 때 접을 수 있고 사용할 수 있습니다.

기기가 잠겨 있거나 디스플레이 항상 켜기가 활성화되면 도움말 풍선이 알림을 일반적으로 실행합니다.

버블은 선택 해제 기능입니다. 앱에 첫 번째 도움말 풍선이 표시되면 권한 대화상자에서 다음 두 가지 중에 선택할 수 있습니다.

  • 앱에서 모든 대화창을 차단합니다. 알림은 차단되지 않지만 풍선으로 표시되지 않습니다.
  • 앱의 대화창을 모두 허용합니다. 다음 기기로 전송된 모든 알림 BubbleMetaData가 풍선으로 표시됩니다.

도움말 풍선 API

도움말 풍선은 알림 API를 사용하여 생성되므로 알림을 있습니다. 알림을 도움말 풍선으로 표시하려면 추가 데이터를 첨부하세요. 하겠습니다.

도움말 풍선 펼쳐 보기는 개발자가 선택하는 활동에서 생성됩니다. 버블로 올바르게 표시되도록 활동을 구성합니다. 활동은 다음과 같아야 합니다. 크기 조절 가능 삽입됩니다. 둘 중 하나가 충족되면 대신 알림으로 표시됩니다.

다음 코드는 버블을 구현하는 방법을 보여줍니다.

<activity
  android:name=".bubbles.BubbleActivity"
  android:theme="@style/AppTheme.NoActionBar"
  android:label="@string/title_activity_bubble"
  android:allowEmbedded="true"
  android:resizeableActivity="true"
/>

앱에서 여러 개의 채팅과 같이 동일한 유형의 대화창을 여러 개 표시하는 경우 대화를 실행하는 경우 활동이 실행될 수 있어야 합니다. 여러 개의 인스턴스가 있을 수 있습니다 Android 10 이하를 실행하는 기기에서는 명시적으로 설정하지 않는 한 알림이 도움말 풍선으로 표시되지 않습니다. documentLaunchMode(으)로 "always"입니다. Android 11부터는 명시적으로 지정할 필요가 없습니다. 이 값을 설정하면 시스템에서 자동으로 모든 대화의 documentLaunchMode에서 "always"(으)로

버블을 전송하려면 다음 단계를 따르세요.

  1. 다음과 같이 알림을 만드세요. 있습니다.
  2. BubbleMetadata.Builder(PendingIntent, Icon)를 호출합니다. 또는 BubbleMetadata.Builder(String) 사용하여 BubbleMetadata 객체를 만듭니다.
  3. 사용 setBubbleMetadata() 드림 알림에 메타데이터를 추가합니다.
  4. Android 11 이상을 타겟팅하는 경우 도움말 풍선이 메타데이터 또는 알림이 공유 바로가기를 참조합니다.

이러한 단계는 다음 예에 나와 있습니다.

Kotlin

// Create a bubble intent.
val target = Intent(context, BubbleActivity::class.java)
val bubbleIntent = PendingIntent.getActivity(context, 0, target, 0 /* flags */)
val category = "com.example.category.IMG_SHARE_TARGET"

val chatPartner = Person.Builder()
    .setName("Chat partner")
    .setImportant(true)
    .build()

// Create a sharing shortcut.
val shortcutId = generateShortcutId()
val shortcut =
   ShortcutInfo.Builder(mContext, shortcutId)
       .setCategories(setOf(category))
       .setIntent(Intent(Intent.ACTION_DEFAULT))
       .setLongLived(true)
       .setShortLabel(chatPartner.name)
       .build()

// Create a bubble metadata.
val bubbleData = Notification.BubbleMetadata.Builder(bubbleIntent,
            Icon.createWithResource(context, R.drawable.icon))
    .setDesiredHeight(600)
    .build()

// Create a notification, referencing the sharing shortcut.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setBubbleMetadata(bubbleData)
    .setShortcutId(shortcutId)
    .addPerson(chatPartner)

자바

// Create a bubble intent.
Intent target = new Intent(mContext, BubbleActivity.class);
PendingIntent bubbleIntent =
    PendingIntent.getActivity(mContext, 0, target, 0 /* flags */);

private val CATEGORY_TEXT_SHARE_TARGET =
    "com.example.category.IMG_SHARE_TARGET"

Person chatPartner = new Person.Builder()
        .setName("Chat partner")
        .setImportant(true)
        .build();

// Create a sharing shortcut.
private String shortcutId = generateShortcutId();
ShortcutInfo shortcut =
   new ShortcutInfo.Builder(mContext, shortcutId)
       .setCategories(Collections.singleton(CATEGORY_TEXT_SHARE_TARGET))
       .setIntent(Intent(Intent.ACTION_DEFAULT))
       .setLongLived(true)
       .setShortLabel(chatPartner.getName())
       .build();

// Create a bubble metadata.
Notification.BubbleMetadata bubbleData =
    new Notification.BubbleMetadata.Builder(bubbleIntent,
            Icon.createWithResource(context, R.drawable.icon))
        .setDesiredHeight(600)
        .build();

// Create a notification, referencing the sharing shortcut.
Notification.Builder builder =
    new Notification.Builder(mContext, CHANNEL_ID)
        .setContentIntent(contentIntent)
        .setSmallIcon(smallIcon)
        .setBubbleMetadata(bubbleData)
        .setShortcutId(shortcutId)
        .addPerson(chatPartner);

도움말 풍선이 전송될 때 앱이 포그라운드에 있다면 중요도가 무시됩니다. 사용자가 대화창이나 알림을 차단하지 않는 한 도움말 풍선이 항상 표시됨 할 수 있습니다.

펼쳐진 대화창 만들기

버블이 자동으로 펼침 상태로 표시되도록 구성할 수 있습니다. 이 기능은 버튼을 탭하여 새 채팅을 시작하는 것과 같은 도움말 풍선이 나타납니다. 이 경우 도움말 풍선이 표시될 때 전송되는 초기 알림을 숨기는 것도 생성됨.

이러한 동작을 활성화하는 플래그를 설정하는 데 사용할 수 있는 메서드가 있습니다. setAutoExpandBubble() 드림 및 setSuppressNotification()

다음 예는 도움말 풍선이 자동으로 표시되도록 구성하는 방법을 보여줍니다. 다음과 같습니다.

Kotlin

val bubbleMetadata = Notification.BubbleMetadata.Builder()
    .setDesiredHeight(600)
    .setIntent(bubbleIntent)
    .setAutoExpandBubble(true)
    .setSuppressNotification(true)
    .build()

자바

Notification.BubbleMetadata bubbleData =
    new Notification.BubbleMetadata.Builder()
        .setDesiredHeight(600)
        .setIntent(bubbleIntent)
        .setAutoExpandBubble(true)
        .setSuppressNotification(true)
        .build();

버블 콘텐츠 수명 주기

도움말 풍선이 펼쳐지면 콘텐츠 활동이 일반적인 프로세스를 거치게 됩니다. 수명 주기에 포함되므로 포그라운드 프로세스가 되는 것을 볼 수 있습니다.

도움말 풍선이 접히거나 닫히면 활동이 제거됩니다. 이로 인해 그 결과, 프로세스가 캐시되고 나중에 종료되는지에 따라 앱에 실행 중인 다른 포그라운드 구성요소가 있습니다.

버블이 표시되는 상황

사용자가 방해받지 않도록 도움말 풍선은 살펴봤습니다

앱이 Android 11 이상을 타겟팅하면 알림이 표시되지 않음 대화와 만나지 않는 한 대화창으로 표시됩니다. 요구사항을 충족하는 방법을 안내합니다. 앱이 Android 10 이하에서는 다음과 같은 경우에만 알림이 도움말 풍선으로 표시됩니다. 다음 조건 중 하나 이상이 충족되어야 합니다.

이러한 조건이 충족되지 않으면 있습니다.

대화창에서 활동 시작

도움말 풍선이 새 활동을 실행하면 새 활동은 동일한 작업 및 대화창으로 표시된 창 내에서 또는 새 작업 내에서 앱을 실행한 도움말 풍선이 접힙니다.

도움말 풍선과 동일한 작업에서 새 활동을 실행하려면 다음을 실행하세요. 1. 인텐트를 시작할 때 활동 컨텍스트를 사용합니다. activity.startActivity(intent) 및 1. 인텐트에 FLAG_ACTIVITY_NEW_TASK 플래그를 설정하면 안 됩니다.

그러지 않으면 새 활동이 새 작업에서 시작되고 도움말 풍선은 접혀 있습니다.

도움말 풍선은 특정 대화를 나타내므로 활동이 해당 대화와 관련이 있어야 합니다. 또한 버블 내에서 활동을 실행하면 버블의 작업 스택이 증가함 사용자 환경이 복잡해질 수 있고 특히 제공합니다.

권장사항

  • 알림이 중요할 때와 같이 중요한 경우에만 알림을 도움말 풍선으로 전송하세요. 사용자가 채팅 메시지 버블을 명시적으로 요청하는 경우 있습니다. 도움말 풍선은 화면 공간을 사용하며 다른 앱 콘텐츠를 가립니다.
  • 대화창 알림이 일반 알림으로도 작동하는지 확인합니다. 날짜 사용자가 도움말 풍선을 사용 중지하면 도움말 풍선 알림이 정상적으로 표시됩니다. 있습니다.
  • 재정의 시 super.onBackPressed 호출 풍선 안의 onBackPressed 있습니다. 그렇지 않으면 도움말 풍선이 제대로 작동하지 않을 수 있습니다.

접힌 도움말 풍선에 업데이트된 메시지가 수신되면 풍선에 배지가 표시됩니다. 아이콘이 표시되지 않습니다. 사용자가 다음 단계를 따르세요.

샘플 앱

사람 대화창을 사용하는 대화 앱입니다. 시연을 위해 이 앱은 챗봇을 사용합니다. 실제 애플리케이션에서는 있습니다.