Bir bildirim grubu oluşturma

Android 7.0'dan (API düzeyi 24) başlayarak, bir grup içinde ilgili bildirimleri görüntüleyebilirsiniz. Örneğin, uygulamanızda alınan e-postalarla ilgili bildirimler gösteriliyorsa yeni e-posta iletileri için tüm bildirimleri aynı grupta toplayarak daraltabilirsiniz.

Daha eski sürümleri desteklemek için tüm ayrı bildirimleri özetlemek üzere tek başına görünen bir özet bildirim ekleyin. Bu işlemi genellikle gelen kutusu tarzında bildirimde yapabilirsiniz.

Şekil 1. Daraltılmış (üstte) ve genişletilmiş (altta) bir bildirim grubu.

Kullanım alanınız için aşağıdaki koşulların tümü geçerliyse bildirim gruplarını kullanın:

  • Alt bildirimler eksiksiz bildirimlerdir ve grup özetine gerek olmadan tek tek görüntülenebilir.

  • Çocuk bildirimlerini tek tek göstermek de bir fayda sağlar. Örneğin:

    • Her bildirime özel eylemlerle bu bildirimler uygulanabilir.

    • Her bildirimde kullanıcının görebileceği daha fazla bilgi bulunur.

Bildirimleriniz önceki ölçütleri karşılamıyorsa bunun yerine yeni bilgilerle mevcut bir bildirimi güncellemeyi veya aynı ileti dizisinde birden çok güncelleme göstermek için mesaj biçiminde bildirim oluşturmayı düşünebilirsiniz.

Grup oluşturma ve gruba bildirim ekleme

Bildirim grubu oluşturmak için gruba ilişkin benzersiz bir tanımlayıcı dizesi tanımlayın. Ardından, grupta istediğiniz her bildirim için grup adını ileterek setGroup() çağrısı yapın. Örneğin:

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

Varsayılan olarak, bildirimler yayınlanma zamanına göre sıralanır, ancak setSortKey() numarasını arayarak sıralamayı değiştirebilirsiniz.

Bir bildirimin grubundaki uyarıların farklı bir bildirimle işlenmesi gerekiyorsa setGroupAlertBehavior() numaralı telefonu arayın. Örneğin, yalnızca grubunuzun özetinin ses çıkarmasını istiyorsanız gruptaki tüm alt kullanıcılar için grup uyarısı davranışı GROUP_ALERT_SUMMARY kullanılmalıdır. Diğer seçenekler GROUP_ALERT_ALL ve GROUP_ALERT_CHILDREN şeklindedir.

Grup özeti ayarlayın

Gruplandırılmış bildirimlerde grup özeti görevi gören ek bir bildirim olmalıdır. Gruplandırılmış bildirimleri etkinleştirmek için grup özeti ayarlamanız gerekir. Bu grup özeti, kullanıcının grupta neler olduğunu anlamasına yardımcı olmak için gruptaki diğer bildirimlerdeki metinlerin bir kısmını içermelidir. Grup özetinin nasıl görüntüleneceği Android sürümüne bağlıdır:

  • İç içe yerleştirilmiş bildirim gruplarını gösteremeyen 7.0'dan (API düzeyi 24) önceki Android sürümlerinde sistem, yalnızca grup özeti bildiriminizi gösterir ve diğerlerini gizler. Kullanıcı, uygulamanızı açmak için grup özeti bildirimine dokunabilir.

  • Android 7.0 ve sonraki sürümlerde sistem, grup özeti bildiriminizi her bir gruplanmış bildirimdeki metin snippet'leriyle etiketlenmiş, iç içe yerleştirilmiş bir bildirim grubu olarak gösterir. Grup özeti bildiriminde ayarladığınız metin gösterilmez. Kullanıcı, Şekil 1'de gösterildiği gibi, iç içe yerleştirilmiş bildirim grubunu genişleterek gruptaki bildirimleri tek tek görebilir.

Android'in daha yeni sürümleri, tasarladığınız grup özeti metnini göstermese bile, gruplandırılmış bildirimleri etkinleştirmek için her zaman manuel olarak bir özet ayarlamanız gerekir. Grup özetinin davranışı, giyilebilir cihazlar gibi bazı cihaz türlerinde değişiklik gösterebilir. Grup özetinizde zengin içerik ayarlamak, tüm cihazlarda ve sürümlerde en iyi deneyimi sağlamanıza yardımcı olur.

Grup özeti eklemek için aşağıdaki adımları uygulayın:

  1. Grubun açıklamasını içeren yeni bir bildirim oluşturun. Bu bildirim genellikle gelen kutusu tarzında bildirim ile yapılır.

  2. setGroup() numaralı telefonu arayarak özet bildirimi gruba ekleyin.

  3. setGroupSummary(true) yöntemini çağırarak grup özeti olarak kullanılması gerektiğini belirtin.

Aşağıdaki kod, grup özeti oluşturmaya ilişkin bir örneği gösterir:

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

Özet bildirim kimliği yalnızca bir kez yayınlanması için aynı kalmalıdır. Böylece daha sonra özet bilgileri değişirse bu kimliği güncelleyebilirsiniz. Gruba sonraki eklemeler, mevcut özetin güncellenmesiyle sonuçlanmalıdır.

Bildirimleri kullanan örnek kod için Android Bildirim Örneği'ne bakın.

Otomatik gruplandırma

Android 7.0 (API düzeyi 24) ve sonraki sürümlerde, uygulamanız dört veya daha fazla bildirim gönderip bir grup anahtarı ya da grup özeti belirtmiyorsa sistem, bunları otomatik olarak birlikte gruplandırabilir. Otomatik olarak gruplandırılan bildirimler, bazı gruplandırılmış bildirimlerden alınan metin snippet'leriyle etiketlenmiş bir grup özeti bildirimiyle birlikte görünür. Kullanıcı, manuel olarak gruplandırılmış bildirimlerde olduğu gibi, her bir bildirimi görmek için bu özet bildirimi genişletebilir.

Otomatik gruplama davranışı bazı cihaz türlerinde değişiklik gösterebilir. Tüm cihazlarda ve sürümlerde en iyi deneyimi sağlamak için bildirimlerin gruplandırılması gerektiğini biliyorsanız bir grup anahtarı ve grup özeti belirterek bildirimlerin gruplandırılmasını sağlayabilirsiniz.