Угруповання сповіщень в Android 7

Після поновлення на Android 7 ми помітили, що повідомлення стали групуватися за додатком автоматично. Так як на момент виходу нової версії Android в нашому додатку ще не було історії повідомлень ця зміна була досить критично — в одній групі відображається тільки 7 повідомлень. Це означає, що якщо приходить більше 20 повідомлень в добу через додаток — необхідно змахувати нові щоб побачити більш старі.

Повідомлення в групі сортуються по пріоритету. Якщо у вас в групі 7 повідомлень і приходить ще одне низького пріоритету — воно спочатку буде нагорі, а потім полетить в самий низ і його зовсім не буде видно списку, до тих пір, поки ви не видалите деяке число повідомлень.

Ми зробили угруповання по каналах, це дозволяє відразу бачити канал і при можливості згорнути його. Навіть якщо канал надішле вам 100 повідомлень — вони однаково легко згортається і видаляються одним рухом.

У цій статті ми розповімо, чому офіційний мануал не працює, і як ми знайшли спосіб зробити все правильно.

Що говорить офіційний мануал?


Якщо зайти сюда, то тут нам рекомендують просто «You can use the Builder.setGroup() method to bundle similar notifications». І далі рекомендують перейти сюда.


Це працює тільки на Android Wear. Ми знайшли рішення методом тику, але при написанні статті було знайдено ще один мануал статті. Він частково вірний, але описано дуже мало.

Як зробили ми
В мануалі вище написано: «It is important to also create a summary notification. Summary This notification, denoted by setGroupSummary(true), is the only notification that appears on Marshmallow and lower devices and should (you guessed it) summarize all of the individual notifications. This is an своєчасним time to use the InboxStyle, although using it is not a requirement. On Android N and higher devices, some information (such as the subtext, content intent, and delete intent) is extracted from the summary notification to produce the collapsed notification for the bundled notifications so you should continue to generate a summary notification on all API levels.»

Тут відразу спливають ті болячки на які ми напоролися.

1. Потрібно обмежити версію API

До Android 7 версії краще взагалі виключити угруповання — бо інакше у вас не буде показано повідомлення у групі при використанні нашого рішення.

Boolean groupflag = false;
if(Build.VERSION.SDK_INT > 23){
groupflag = true;
}

2. Автозакриття і нарощування

Якщо не буде вказано setAutoCancel(true) — при натисканні на останні повідомлення з групи — група залишиться висіти в списку. При приході ще одного повідомлення з групи можна створювати основне заголовочное з тим же ID — для ідентифікації ми використовуємо для такого повідомлення ID каналу (subid), а через setContentTitle задається заголовок групи.

if(groupflag) {
Notification mainnotif = new NotificationCompat.Builder(this)
.setContentTitle(subname)
.setAutoCancel(true)
.setSmallIcon(R. mipmap.ic_launcher)
.setGroupSummary(true)
.setGroup(subname)
.setStyle(new NotificationCompat.MessagingStyle(subname))
.setColor(ContextCompat.getColor(context, R. color.blue))
.setSubText(subname)
.build();
notificationManager.notify(subid, mainnotif);
}

3. Створення самого повідомлення

Не забуваємо setGroup(subname). Також цікавий лайфхак, якщо вам потрібно просто вимкнути стандартну угруповання — ви можете додати приміром, setGroup(«App») без створення заголовкого повідомлення. Тоді угруповання на самому пристрої працювати не буде, але для відключення груп ще й на годиннику, думаю варто писати туди рендомний текст. Без зазначення групи, повідомлення будуть групуватися за вашим додатком.

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
context).setSmallIcon(R. mipmap.ic_launcher)
.setAutoCancel(true)
.setWhen(time)
.setTicker(title)
.setLargeIcon(icon)
.setContentTitle(title)
.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
.setContentText(msg)
.setVibrate(new long[0])
.setSubText(subname)
.setGroupSummary(false)
.setColor(ContextCompat.getColor(context, R. color.blue));


if(groupflag)
mBuilder.setGroup(subname);

Спробувати такі повідомлення можна у нашому додатку, просто додайте пристрій в аккаунт і пропингуйте через особистий кабінет в профілі 4-6 разів. Дана реалізація дозволяє непогано заощаджувати місце в області сповіщень і ефективно управляти ними. Я дуже часто бачу як в додатках або замінюють попереднє повідомлення, по суті прибираючи можливість його прочитати, або просто не використовують угрупування там де вона можлива.

Також невелика деталь, якщо вірити розділ про метадані «метод addPerson() дозволяє додати до повідомлення список людей. З його допомогою ваше повідомлення може сигналізувати системі про те, що вона повинна згрупувати попередження від зазначених осіб або вважати повідомлення від цих людей більш важливими.» В даному випадку можна не використовувати вищенаписане в статті, якщо у вас використовуються наприклад повідомлення про особистих повідомленнях користувачів. Однак цей спосіб не пробували.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.