How to specify Android notification channel for FCM push messages in Android 8

Vit Khudenko picture Vit Khudenko · Aug 29, 2017 · Viewed 41.7k times · Source

Our app now has targetSdkVersion 26 (Android 8) and the app uses FCM push notifications.

As FCM documentation prescribes I updated the FCM client library to version 11.2.0:

dependencies {
     compile 'com.google.firebase:firebase-messaging:11.2.0'
}

With this FCM client library update the FCM notifications started to appear on Android devices. Good, but when app is in background it's system who processes the FCM message, so it uses the default Android notification channel named "Miscellaneous", which is not what we want (we have other notification channels and "Miscellaneous" sounds confusing in that list).

As FCM documentation says there is a way to specify default notification channel for FCM messages:

(Optional) Within the application component, metadata elements to set a default icon, color and notification channel (new in Android O) for notifications. Android uses these values whenever incoming messages do not explicitly set icon, color or notification_channel.

However there is no code sample shown (samples are shown only for icon and color). So I just found by googling a sample in Firebase Cloud Messaging Quickstart on github:

<meta-data
    android:name="com.google.firebase.messaging.default_notification_channel"
    android:value="@string/default_notification_channel_id"/>

But it does not work - FCM notifications still appear within the "Miscellaneous" channel. And I see in the logs:

W/FirebaseMessaging: Missing Default Notification Channel metadata in AndroidManifest. Default value will be used.

Of course, I tried to reinstall the app. Still having the issue.

Well, ideally there should be some way to specify notification channel(s) on back-end at the moment of sending the messages. The FCM dev console, which allows to test sending, now has such an option in UI:

enter image description here

And it works fine. However our back-end uses Java Amazon SNS API and I have no idea if that API allows to specify Android notification channel when sending a message (because it'a new Android feature, and Amazon needs time to adopt it). So setting a default notification channel in AndroidManifest.xml would be a valid workaround for now, but it does not work.

Answer

user1209216 picture user1209216 · Aug 29, 2017

Look at docs: https://firebase.google.com/docs/cloud-messaging/http-server-ref

android_channel_id The notification's channel id (new in Android O).

The app must create a channel with this ID before any notification with this key is received.

If you don't send this key in the request, or if the channel id provided has not yet been created by your app, FCM uses the channel id specified in your app manifest.

Try to include android_channel_id in json you are about to post to fcm. I have no idea why manifest value is not working for you. Try to just add channel to your request, you should get the same effect as from Firebase Console.

Edit: I just realized you are asking for Amazon client integration. Maybe you are able to build json request manually then (I don't know much about Amazon services, sorry).