Наше приложение теперь имеет targetSdkVersion 26
(Android 8), и приложение использует push-уведомления FCM.
Поскольку документация FCM предписывает, я обновил клиентскую библиотеку FCM до версии 11.2.0:
dependencies {
compile 'com.google.firebase:firebase-messaging:11.2.0'
}
С этим обновлением клиентской библиотеки FCM на устройствах Android начали появляться уведомления FCM. Хорошо, но когда приложение находится в фоновом режиме, система, которая обрабатывает сообщение FCM, поэтому использует канал уведомлений по умолчанию Android с именем "Разное", который не то, что мы хотим (у нас есть другие каналы уведомлений и "Разное", которые смешиваются в этом списке).
В документации FCM говорится, что есть способ указать канал уведомлений по умолчанию для сообщений FCM:
(Необязательно) В компоненте приложения элементы метаданных для установки значка по умолчанию, цветного и уведомляющего канала (нового в Android O) для уведомлений. Android использует эти значения, когда входящие сообщения явно не устанавливают значок, цвет или уведомление_channel.
Однако не отображается пример кода (образцы показаны только для значка и цвета). Таким образом, я только что обнаружил, используя пример в Firebase Cloud Messaging Quickstart на github:
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel"
android:value="@string/default_notification_channel_id"/>
Но это не работает - уведомления FCM все еще появляются в канале "Разное". И я вижу в журналах:
W/FirebaseMessaging: Отсутствует метаданные канала уведомления по умолчанию в AndroidManifest. Будет использоваться значение по умолчанию.
Конечно, я попытался переустановить приложение. Все еще проблема.
Наилучшим образом, в идеале должен быть какой-то способ указать канал уведомления в фоновом контенте в момент отправки сообщений. Консоль FCM dev, которая позволяет тестировать отправку, теперь имеет такой вариант в пользовательском интерфейсе:
И он отлично работает. Однако наш back-end использует Java Amazon SNS API, и я не знаю, сможет ли этот API указать канал уведомлений Android при отправке сообщения (потому что это новая функция Android, и Amazon требует времени, чтобы принять ее). Поэтому установка канала уведомлений по умолчанию в AndroidManifest.xml
будет действительным обходным решением на данный момент, но это не сработает.