Как указать канал уведомлений 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, которая позволяет тестировать отправку, теперь имеет такой вариант в пользовательском интерфейсе:

enter image description here

И он отлично работает. Однако наш 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, извините).