バブルを使用してユーザーが会話に参加できるようにする

バブルにより、ユーザーは会話を簡単に表示したり、会話に参加したりできます。

図 1. チャットのふきだし。

バブルは通知システムに組み込まれています。他のアプリの上にフロートしている ユーザーがどこにいてもフォローできます。バブルを展開すると、 アプリのコンテンツを操作したり 操作したりできます できます。

デバイスがロックされているとき、または「常に表示状態のディスプレイ」が有効な場合、ふきだしは できます。

バブルは、オプトアウト式の機能です。アプリが最初のバブルを表示すると、 権限ダイアログには次の 2 つの選択肢があります。

  • アプリからすべてのバブルをブロックする。通知はブロックされませんが、 バブルとして表示されません。
  • アプリからすべてのバブルを許可します。すべての通知は 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. Google Chat で通知を作成する できます。
  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)

Java

// 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()

Java

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

バブル コンテンツのライフサイクル

バブルが展開されると、コンテンツ アクティビティは通常のプロセスを行います。 ライフサイクルによって フォアグラウンド プロセスになっていない場合は、そのプロセスを開始する必要があります。

バブルが閉じられるか閉じられると、アクティビティは破棄されます。これにより、 その結果、プロセスがキャッシュに保存された後、その後強制終了されます。 他のフォアグラウンド コンポーネントが実行されている。

バブルが表示されるタイミング

ユーザーの作業を邪魔しないように、バブルは特定の環境下でのみ 対応できます。

Android 11 以降をターゲットとするアプリの場合、通知は 会話の条件を満たしていない場合は、バブルとして表示されます。 要件をご覧ください。アプリが Android 10 以前では、次の場合にのみ通知がバブルとして表示されます。 次の条件が 1 つ以上満たされます。

これらの条件がいずれも満たされていない場合は、 クリックします。

バブルからアクティビティを起動する

バブルが新しいアクティビティを起動すると、新しいアクティビティは 同じタスクおよび同じバブル ウィンドウ内、または新しいタスク内で、 起動したバブルが閉じられます。

バブルと同じタスクで新しいアクティビティを起動するには: 1.インテントを起動するときにアクティビティ コンテキストを使用する。 activity.startActivity(intent)、および 1.インテントに FLAG_ACTIVITY_NEW_TASK フラグを設定しないでください。

そうしないと、新しいアクティビティが新しいタスクで開始され、バブルが 閉じています。

バブルは特定の会話を表すため、アクティビティは その会話に関連する内容である必要があります。また バブル内でアクティビティを起動すると、バブルのタスクスタックが増える ユーザーエクスペリエンスが 複雑化する可能性もあります ナビゲーションです。

おすすめの方法

  • 重要な通知が来たときなど、重要な通知だけをバブルで送信する ユーザーが明示的にバブルをリクエストした場合に、 説明します。バブルは、画面スペースを使用して他のアプリ コンテンツを覆います。
  • バブル通知が通常の通知としても機能することを確認します。日時 ユーザーがバブルを無効にすると、バブル通知が通常の通知として表示されます。 通知を受け取ります。
  • オーバーライド時に super.onBackPressed を呼び出す バブル内の onBackPressed できます。そうしないと、バブルが正しく動作しない可能性があります。

折りたたまれたバブルに最新のメッセージが届くと、バブルにバッジが表示されます。 未読メッセージを示します。ユーザーが Google Chat でメールを開くと、 次の手順を踏みます。

サンプルアプリ

サンプルアプリは、バブルを使用する会話アプリです。デモンストレーションでは、 chatbot を使用しています。実際のアプリケーションでは、メッセージにバブルを使用して、 できます。