Firebase: How to set default notification channel in Android app?
Asked Answered
L

4

55

How to set default notification channel for notification messages that come when an app is in the background? By default, these messages use "Miscellaneous" channel.

Lorenzo answered 5/9, 2017 at 5:7 Comment(0)
L
69

As you can see here in the official docs, you need to add the following metadata element in your AndroidManifest.xml within the application component:

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

This default channel will be used when notification message has no specified channel, or if the channel provided has not yet been created by the app.

Lorenzo answered 5/9, 2017 at 5:7 Comment(10)
where is this default_notification_channel_idOllayos
in your strings.xml file, put <string name=“default_notification_channel_id”>Channel ID</string>, you can take a look at this post for more information: medium.com/exploring-android/…Barbabas
What happens if we do not create even a default notification channel like above in the app manifest?Deal
@Deal I don't think setting your own default notification channel is necessary. The docs state: "FCM provides a default notification channel with basic settings. If you prefer to create and use your own default channel, set default_notification_channel_id to the ID of your notification channel object as shown;"Selfexpression
Surely the string "Channel ID" defined in the strings res must tie up with SOMETHING SOMEWHERE?Pyxidium
If creating the strings.xml file, be sure you format it correctly with the xml version and resources tag or you'll get build errors. See here: developer.android.com/guide/topics/resources/string-resourceHen
after <string name= make sure to use normal quotes " instead of curved quotation /Dermott
You may refer to this post regarding how to create a notification channel in Flutter. https://mcmap.net/q/339409/-firebase-push-notification-is-not-popup-on-the-screen-flutterLoudmouthed
where this channel is checked? like the NotificationChannel.DEFAULT_CHANNEL_IDObeisance
Worked for me for the debug build, but doesn't seem to work in release. Why is that?Simonasimonds
A
5

You need to have registered a channel using NotificationManager CreateNotificationChannel.

This example uses c# in Xamarin, but is broadly applicable elsewhere

private void ConfigureNotificationChannel()
{
    if (Build.VERSION.SdkInt < BuildVersionCodes.O)
    {
        // Notification channels are new in API 26 (and not a part of the
        // support library). There is no need to create a notification
        // channel on older versions of Android.
        return;
    }

    var channelId = Resources.GetString(Resource.String.default_notification_channel_id);
    var channelName = "Urgent";
    var importance = NotificationImportance.High;

    //This is the default channel and also appears in the manifest
    var chan = new NotificationChannel(channelId, channelName, importance);

    chan.EnableVibration(true);
    chan.LockscreenVisibility = NotificationVisibility.Public;

    var notificationManager = (NotificationManager)GetSystemService(NotificationService);
    notificationManager.CreateNotificationChannel(chan);

}

This channel should be unique eg com.mycompany.myapp.urgent

You then add a reference to a string inside the application tag in the AndroidManifest.xml

<application android:label="MyApp" android:icon="@mipmap/icon">
    <meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id" />
</application>

Finally, setup the string in strings.xml

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
    <string name="default_notification_channel_id">com.mycompany.myapp.urgent</string>
</resources>
Anglophobe answered 11/3, 2021 at 10:0 Comment(1)
This isn't working for me in release mode, only in debug. Can you help?Simonasimonds
C
1

you need to add Cordova config.xml

<widget 
... 
xmlns:android="http://schemas.android.com/apk/res/android" 
...>



 <platform name="android">
    <config-file target="AndroidManifest.xml" parent="application" mode="merge">
      <meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id"/>
    </config-file>
    <config-file target="res/values/strings.xml" parent="/*">
      <string name="default_notification_channel_id">urgent_alert</string>
    </config-file>
</platform>
Century answered 19/5, 2020 at 8:43 Comment(0)
C
0

as my cases i already added

  • metadata on AndroidManifest.xml
  • Android Notification Channel on MainActivity.kt
  • <string name="default_notification_channel_id" translatable="false">fcm_default_channel</string> on values/string.xml

then i figured out that my running devices at that time is on Night/Dark mode, so i need to copy values/string.xml to values-night/string.xml (create one if doesn't exist) then the local notifications will appear

so between the light and dark mode we need to adjust independently for the values

Chlorinate answered 29/9, 2023 at 1:32 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.