Tworzenie grupy powiadomień

Od Androida 7.0 (poziom interfejsu API 24) możesz wyświetlać powiązane powiadomienia w grupie. Jeśli np. Twoja aplikacja wyświetla powiadomienia o otrzymanych e-mailach, umieść wszystkie powiadomienia o nowych wiadomościach w tej samej grupie, aby można je było zwinąć.

Aby obsługiwać starsze wersje, dodaj powiadomienie podsumowujące, które będzie wyświetlane samodzielnie i będzie zawierać podsumowanie wszystkich oddzielnych powiadomień. Zwykle robi się to za pomocą powiadomienia w stylu skrzynki odbiorczej.

Zwinięta i rozwinięta grupa powiadomień
Rysunek 1. Zwinięta (u góry) i rozwinięta (u dołu) grupa powiadomień.

Jeśli w Twoim przypadku spełnione są wszystkie te warunki, użyj grup powiadomień:

  • Powiadomienia podrzędne są pełnymi powiadomieniami i mogą być wyświetlane pojedynczo bez podsumowania grupy.

  • Wyświetlanie powiadomień podrzędnych pojedynczo jest korzystne. Na przykład:

    • Mają działania specyficzne dla każdego powiadomienia.

    • Każde powiadomienie zawiera więcej informacji, które użytkownik może zobaczyć.

Jeśli Twoje powiadomienia nie spełniają powyższych kryteriów, rozważ zaktualizowanie istniejącego powiadomienia o nowe informacje lub utworzenie powiadomienia w stylu wiadomości, aby wyświetlać wiele aktualizacji w tej samej rozmowie.

Tworzenie grupy i dodawanie do niej powiadomienia

Aby utworzyć grupę powiadomień, zdefiniuj unikalny identyfikator grupy. Następnie w przypadku każdego powiadomienia, które ma się znaleźć w grupie, wywołaj funkcję setGroup, przekazując nazwę grupy. Przykład:

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

Domyślnie powiadomienia są sortowane według daty ich opublikowania, ale możesz zmienić kolejność, wywołując funkcję setSortKey.

Jeśli alerty dotyczące grupy powiadomień muszą być obsługiwane przez inne powiadomienie, wywołaj funkcję setGroupAlertBehavior. Jeśli np. chcesz, aby tylko podsumowanie grupy generowało dźwięk, wszystkie powiadomienia podrzędne w grupie muszą mieć zachowanie alertu grupy GROUP_ALERT_SUMMARY. Pozostałe opcje to GROUP_ALERT_ALL i GROUP_ALERT_CHILDREN.

Ustawianie podsumowania grupy

Zgrupowane powiadomienia muszą mieć dodatkowe powiadomienie, które pełni funkcję podsumowania grupy. Aby włączyć zgrupowane powiadomienia, musisz ustawić podsumowanie grupy. Podsumowanie grupy musi zawierać część tekstu z każdego z pozostałych powiadomień w grupie, aby użytkownik mógł zrozumieć, co znajduje się w grupie. Sposób wyświetlania podsumowania grupy zależy od wersji Androida:

  • Wersje Androida starsze niż 7.0 (poziom interfejsu API 24) nie mogą wyświetlać zagnieżdżonej grupy powiadomień, dlatego system wyświetla tylko powiadomienie z podsumowaniem grupy i ukrywa wszystkie pozostałe. Użytkownik może kliknąć powiadomienie z podsumowaniem grupy, aby otworzyć Twoją aplikację.

  • W Androidzie 7.0 i nowszych wersjach system wyświetla powiadomienie z podsumowaniem grupy jako zagnieżdżoną grupę powiadomień, oznaczoną fragmentami tekstu z każdego zgrupowanego powiadomienia. Nie wyświetla tekstu ustawionego w powiadomieniu z podsumowaniem grupy. Użytkownik może rozwinąć zagnieżdżoną grupę powiadomień, aby zobaczyć poszczególne powiadomienia w grupie, jak pokazano na rysunku 1.

Nawet jeśli nowsze wersje Androida nie wyświetlają tekstu podsumowania grupy, który zaprojektujesz, musisz ręcznie ustawić podsumowanie, aby włączyć zgrupowane powiadomienia. Zachowanie podsumowania grupy może się różnić w zależności od typu urządzenia, np. urządzeń do noszenia. Ustawienie szczegółowych treści w podsumowaniu grupy pomaga zapewnić najlepsze wrażenia na wszystkich urządzeniach i we wszystkich wersjach.

Aby dodać podsumowanie grupy:

  1. Utwórz nowe powiadomienie z opisem grupy – najlepiej zrobić to za pomocą powiadomienia w stylu skrzynki odbiorczej.

  2. Dodaj powiadomienie podsumowujące do grupy, wywołując funkcję setGroup.

  3. Określ, że ma być używane jako podsumowanie grupy, wywołując funkcję setGroupSummary(true).

Poniższy kod pokazuje przykład tworzenia podsumowania grupy:

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

Identyfikator powiadomienia podsumowującego musi pozostać taki sam, aby było ono publikowane tylko raz i aby można było je później zaktualizować, jeśli informacje podsumowujące się zmienią. Kolejne dodania do grupy muszą powodować aktualizację istniejącego podsumowania.

Automatyczne grupowanie

W Androidzie 7.0 (poziom interfejsu API 24) i nowszych wersjach, jeśli Twoja aplikacja wysyła powiadomienia i nie określa klucza grupy ani podsumowania grupy, system może automatycznie je zgrupować. Automatycznie zgrupowane powiadomienia są wyświetlane z powiadomieniem podsumowującym grupy, oznaczonym fragmentami tekstu z niektórych zgrupowanych powiadomień. Użytkownik może rozwinąć to powiadomienie podsumowujące, aby zobaczyć poszczególne powiadomienia, tak jak w przypadku powiadomień zgrupowanych ręcznie.

Zachowanie automatycznego grupowania może się różnić w zależności od typu urządzenia. Aby zapewnić najlepsze wrażenia na wszystkich urządzeniach i we wszystkich wersjach, jeśli wiesz, że powiadomienia muszą być zgrupowane, określ klucz grupy i podsumowanie grupy, aby mieć pewność, że zostaną zgrupowane.