Настройка каналов уведомлений (Notification Channels) для Android
С Android 8.0 (API 26) каждое уведомление должно принадлежать каналу — иначе NotificationManager.notify() молча игнорируется. Пользователь управляет настройками звука, вибрации и отображения отдельно для каждого канала в системных настройках. Канал создаётся один раз при первом запуске приложения.
Создание каналов
val channel = NotificationChannel(
CHANNEL_ID_MESSAGES,
"Сообщения",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Личные сообщения от других пользователей"
enableLights(true)
lightColor = Color.BLUE
enableVibration(true)
vibrationPattern = longArrayOf(0, 250, 250, 250)
setShowBadge(true)
}
val notificationManager = getSystemService(NotificationManager::class.java)
notificationManager.createNotificationChannel(channel)
createNotificationChannel() безопасно вызывать при каждом запуске приложения — если канал уже существует, вызов игнорируется. Исключение: если изменить name или description — обновится. Если изменить importance — нет, пользовательские настройки приоритетнее.
Группы каналов
Для приложений с большим числом каналов (новостной агрегатор с каналами под каждую рубрику, мессенджер с каналами под тип сообщений) — NotificationChannelGroup. Группирует каналы в системных настройках:
notificationManager.createNotificationChannelGroup(
NotificationChannelGroup("group_social", "Социальные")
)
// Затем у канала: channel.group = "group_social"
Что нельзя менять после создания
Importance, звук, вибрацию — пользователь настраивает сам, приложение не может переопределить. Если нужен другой звук для существующего канала — придётся создать новый канал с новым ID. Старый останется в системных настройках пользователя.
Удаление устаревших каналов: notificationManager.deleteNotificationChannel(oldChannelId). Чистка при обновлении версии приложения — хорошая практика, иначе пользователь видит давно неиспользуемые каналы в настройках.
FCM и каналы
Firebase Cloud Messaging с API 26+ требует, чтобы в payload был android.channel_id. Если канал не указан или не существует — уведомление идёт в канал по умолчанию из AndroidManifest.xml:
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/default_notification_channel_id" />
Без этой записи FCM-уведомления на Android 8+ не показываются.
Настройка каналов уведомлений с группами и интеграцией FCM: 1 день. Стоимость рассчитывается индивидуально.







