Правильный способ создания каналов уведомлений из Android O Api
Каналы уведомлений, которые появились в версии Android O (API 26). Я читал об этом по следующим ссылкам:
Вопросы:
Если у меня несколько номеров уведомлений, то стоит ли создавать каналы уведомлений при запуске приложения и сохранять их в
ApplicationScope
?public void addNotificationChannels(Context context) { List<NotificationChannel> channels = new ArrayList<>(); channels.add("channel_1"); channels.add("channel_2"); . . channels.add("channel_7"); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannels(channels); }
Что будет, если я попытаюсь выполнить эту строку
new Notification.Builder(getApplicationContext(), PRIMARY_CHANNEL)
перед добавлением каналов в диспетчер уведомлений
3 ответа
Что я делаю, так это расширение класса приложения (не забудьте обновить манифест приложения именем класса) и создание каналов уведомлений один раз в методе onCreate. Это гарантирует, что каналы уведомления всегда создаются при создании уведомления.
ИМХО, это пустая трата циклов ЦП, чтобы (пытаться) создавать каналы уведомлений для каждого уведомления снова и снова.
В качестве примечания: я всегда также регистрирую версию приложения, что весьма полезно, когда кто-то отправляет logcat.
- В идеале, вы должны создать канал при публикации уведомления на него. Звонить безопасно
createNotificationChannel
с тем же идентификатором, использованным ранее, он не будет воссоздан. - Ваша заявка не будет публиковать это уведомление. Система может показывать предупреждение о том, что вашему приложению не разрешено публиковать это уведомление.
А) Как сказано в документации:
Создание существующего канала уведомлений с его исходными значениями не выполняет никаких операций, поэтому безопасно вызывать этот код при запуске приложения.
Таким образом, вы можете безопасно создавать канал уведомлений одновременно с созданием самого уведомления, поэтому нет необходимости проверять, создан ли канал уже.
Б) Внутри приложения или любой деятельности / фрагмента.
Примечание. В случае использования необработанного FCM интересно создать канал до того, как SDK опубликует для вас уведомление, потому что в соответствии с параметром push-loadload android_channel_id
Вы можете связать этот push-канал с конкретным каналом, уже созданным в вашем приложении.
Полезные нагрузки Fcm: https://firebase.google.com/docs/cloud-messaging/http-server-ref
Я думаю, что есть два разумных пути:
1. Создайте все каналы в подклассе приложения,
2. Создайте все каналы в своей основной деятельности, которая начинается с приложения.