Как указать канал уведомлений Android для push-сообщений FCM в Android 8
Наше приложение теперь имеет 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
будет действительным обходным решением на данный момент, но это не сработает.
Ответы
Ответ 1
Посмотрите документы: https://firebase.google.com/docs/cloud-messaging/http-server-ref
android_channel_id Идентификатор канала уведомлений (новый в Android O).
Приложение должно создать канал с этим идентификатором перед любым уведомлением с этим ключом получен.
Если вы не отправите этот ключ в запросе или если идентификатор канала если ваше приложение еще не создано, FCM использует идентификатор канала указано в манифесте приложения.
Попробуйте включить android_channel_id
в json, который вы собираетесь опубликовать в fcm. Я понятия не имею, почему ценность манифеста не работает для вас. Попробуйте добавить канал к вашему запросу, вы получите тот же эффект, что и в Firebase Console.
Изменение: Я только что понял, что вы просите интеграции клиента Amazon. Может быть, тогда вы сможете создать запрос json вручную (я не очень разбираюсь в сервисах Amazon, извините).