通知グループを作成する

Android 7.0(API レベル 24)以降では、関連する通知をグループに表示できます。たとえば、アプリで受信メールの通知を表示する場合は、新着メールの通知をすべて同じグループに配置して、まとめて折りたたむようにします。

古いバージョンをサポートするには、個別の通知をすべて要約するために、単独で表示される概要通知を追加します。多くの場合、これには受信トレイ形式の通知が最適です。

図 1. 折りたたまれた通知グループ(上)と展開された通知グループ(下)。

ユースケースで次のすべての条件に該当する場合は、通知グループを使用します。

  • 子通知は完全な通知であり、グループの概要なしで個別に表示できます。

  • 子通知を個々に表示する利点がある。たとえば、以下の場合です。

    • 子通知に対して操作が可能で、各通知に固有の操作がある。

    • 各通知には、ユーザーが参照できる詳細情報が記載されています。

通知が上記の基準を満たしていない場合は、代わりに新しい情報で既存の通知を更新するか、同じ会話に複数の更新を表示するメッセージ スタイルの通知を作成することを検討してください。

グループを作成して通知を追加する

通知グループを作成するには、グループの一意の識別子の文字列を定義します。次に、グループに含める通知ごとに、setGroup() を呼び出して、グループ名を渡します。次に例を示します。

Kotlin

val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

Java

String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

デフォルトでは、通知は送信された順に表示されますが、setSortKey() を呼び出して順序を変更できます。

通知グループのアラートを別の通知で処理する必要がある場合は、setGroupAlertBehavior() を呼び出します。たとえば、グループの概要からのみ音を鳴らす場合は、グループ内のすべての子にグループのアラート動作 GROUP_ALERT_SUMMARY が必要です。他のオプションは GROUP_ALERT_ALLGROUP_ALERT_CHILDREN です。

グループ概要を設定する

グループ化された通知には、グループの概要として機能する追加の通知が必要です。グループ通知を有効にするには、グループの概要を設定する必要があります。このグループの概要には、ユーザーがグループの内容を理解できるように、グループ内の他の通知のテキストの一部を含める必要があります。グループの概要の表示方法は、Android のバージョンによって異なります。

  • 通知のネストされたグループを表示できない 7.0(API レベル 24)より前の Android バージョンでは、グループの概要通知のみが表示され、他のすべての通知は非表示になります。ユーザーはグループの概要通知をタップしてアプリを開くことができます。

  • Android 7.0 以降では、グループの概要通知は、ネストされた通知グループとして表示され、グループ化された各通知のテキスト スニペットが表示されます。グループの概要通知で設定したテキストは表示されません。図 1 に示すように、ユーザーは通知のネストされたグループを展開して、グループ内の個々の通知を表示できます。

新しいバージョンの Android で、設計したグループ サマリー テキストが表示されない場合でも、グループ化された通知を有効にするには、常に手動でサマリーを設定する必要があります。グループの概要の動作は、ウェアラブルなど、一部のデバイスタイプによって異なる場合があります。グループの概要にリッチ コンテンツを設定することで、すべてのデバイスとバージョンで最適なエクスペリエンスを提供できます。

グループ概要を追加する手順は次のとおりです。

  1. グループの説明を記載した新しい通知を作成します。通常は、受信トレイ スタイルの通知が適しています。

  2. setGroup() を呼び出して、概要通知をグループに追加します。

  3. setGroupSummary(true) を呼び出して、グループの概要として使用する必要があることを指定します。

次のコードは、グループの概要を作成する例を示しています。

Kotlin

// Use constant ID for notifications used as group summary.
val SUMMARY_ID = 0
val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification1 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject1.getSummary())
        .setContentText("You will not believe...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

val newMessageNotification2 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject2.getSummary())
        .setContentText("Please join us to celebrate the...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

val summaryNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setContentTitle(emailObject.getSummary())
        // Set content text to support devices running API level < 24.
        .setContentText("Two new messages")
        .setSmallIcon(R.drawable.ic_notify_summary_status)
        // Build summary info into InboxStyle template.
        .setStyle(NotificationCompat.InboxStyle()
                .addLine("Alex Faarborg Check this out")
                .addLine("Jeff Chang Launch Party")
                .setBigContentTitle("2 new messages")
                .setSummaryText("janedoe@example.com"))
        // Specify which group this notification belongs to.
        .setGroup(GROUP_KEY_WORK_EMAIL)
        // Set this notification as the summary for the group.
        .setGroupSummary(true)
        .build()

NotificationManagerCompat.from(this).apply {
    notify(emailNotificationId1, newMessageNotification1)
    notify(emailNotificationId2, newMessageNotification2)
    notify(SUMMARY_ID, summaryNotification)
}

Java

// Use constant ID for notifications used as group summary.
int SUMMARY_ID = 0;
String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification1 =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject1.getSummary())
        .setContentText("You will not believe...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Notification newMessageNotification2 =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject2.getSummary())
        .setContentText("Please join us to celebrate the...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Notification summaryNotification =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setContentTitle(emailObject.getSummary())
        // Set content text to support devices running API level < 24.
        .setContentText("Two new messages")
        .setSmallIcon(R.drawable.ic_notify_summary_status)
        // Build summary info into InboxStyle template.
        .setStyle(new NotificationCompat.InboxStyle()
                .addLine("Alex Faarborg  Check this out")
                .addLine("Jeff Chang    Launch Party")
                .setBigContentTitle("2 new messages")
                .setSummaryText("janedoe@example.com"))
        // Specify which group this notification belongs to.
        .setGroup(GROUP_KEY_WORK_EMAIL)
        // Set this notification as the summary for the group.
        .setGroupSummary(true)
        .build();

NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(emailNotificationId1, newMessageNotification1);
notificationManager.notify(emailNotificationId2, newMessageNotification2);
notificationManager.notify(SUMMARY_ID, summaryNotification);

概要通知の ID は、一度だけ送信されるように、また後で概要情報が変更された場合に更新できるように、同じままにする必要があります。後からグループに追加すると、既存のサマリーを更新する必要があります。

通知を使用するサンプルコードについては、Android の通知のサンプルをご覧ください。

自動グループ化

Android 7.0(API レベル 24)以降では、アプリが 4 つ以上の通知を送信し、グループキーまたはグループ サマリーが指定されていない場合、システムが自動的にそれらをグループ化することがあります。自動的にグループ化された通知は、グループの概要通知とともに、グループ化された通知の一部のテキストのスニペットのラベル付きで表示されます。この概要通知を展開すると、手動でグループ化した通知と同様に、個々の通知を表示できます。

デバイスの種類によっては、自動グループ化の動作が異なる場合があります。すべてのデバイスとバージョンで最適なエクスペリエンスを提供するには、通知をグループ化する必要があることがわかっている場合は、グループキーとグループの概要を指定して、グループ化されるようにします。