38

Our app now has targetSdkVersion 26 (Android 8) and the app uses FCM push notifications. When app is in the foreground state the push notification is working well. The issue appears while clicking the notification when the app is not in the foreground state. I just added the metadata in manifest but still got same error.

AndroidManifest.xml

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

MyFirebaseMessagingService.java

/**
 * Create and show a simple notification containing the received FCM message.
 */
private void sendNotification(NotificationModel notificationModel) 
{
    Intent intent;
    if (notificationModel.getAppLink() != null) 
    {
        intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(notificationModel.getAppLink()));
    } else 
    {
        intent = new Intent(this, NoticeActivity.class);
    }

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
            PendingIntent.FLAG_ONE_SHOT);
    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);

    if (notificationModel.getAppLink() != null) 
    {
        notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
    } else 
    {
        notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
    }

    notificationBuilder.setContentTitle(notificationModel.getTitle())
            .setContentText(notificationModel.getMessage())
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O)
    {
        int importance = NotificationManager.IMPORTANCE_LOW;
        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);
        notificationChannel.enableLights(true);
        notificationChannel.setLightColor(Color.RED);
        notificationChannel.enableVibration(true);
        notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
        assert notificationManager != null;
        notificationBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
        notificationManager.createNotificationChannel(notificationChannel);
    }

    assert notificationManager != null;
    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
jazzbpn
  • 6,441
  • 16
  • 63
  • 99
  • 2
    [Related question](https://stackoverflow.com/q/46047343/199364) with better answer. Importantly, see comments under the accepted answer, explaining how to define `@string/default_notification_channel_id`in your `strings.xml` - otherwise, you are referring to a non-existent value. – ToolmakerSteve Mar 27 '19 at 12:43
  • Possible duplicate of [Firebase: How to set default notification channel in Android app?](https://stackoverflow.com/questions/46047343/firebase-how-to-set-default-notification-channel-in-android-app) – ToolmakerSteve Mar 27 '19 at 12:44

4 Answers4

33

I know this is late but I hope this helps you or at least someone else. It has been answered before here.

Basically, you have the meta-data name wrong.
Instead of

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

it should be

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

UPDATE: Added missing quote

Pushpendra
  • 1,492
  • 1
  • 17
  • 33
Simran
  • 329
  • 3
  • 6
6

Answer and tips for newer

The meta-data tag:

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

Is going inside the application tag on AndroidManifest.xml, example:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.domain.appname">

  <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@mipmap/ic_launcher" />

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

And there is a file called "app/src/main/res/values/strings.xml" where you need to add this line inside resources tag :

<string name="default_notification_channel_id">com.domain.appname.urgent</string>

The value "com.domain.appname.urgent" need to be the same as your default created channel.

strings.xml look like:

<?xml version='1.0' encoding='utf-8'?>
<resources>
    <string name="app_name">MyApp</string>
    <string name="title_activity_main">MyApp</string>
    <string name="package_name">com.domain.appname</string>
    <string name="custom_url_scheme">com.domain.appname</string>
    <string name="default_notification_channel_id">com.domain.appname.urgent</string>
</resources>
manuelpgs
  • 1,283
  • 1
  • 14
  • 20
2

I had the same problem as you. You had an incorrect meta name.

Instead of

android:name="com.google.firebase.messaging.default_notification_channel"

you should use

android:name="com.google.firebase.messaging.default_notification_channel_id"

the only different is the "_id"

Jimmy
  • 46
  • 2
  • 7
2

Ah!,you may be forget to add channel id on your manifest so check your manifest and add meta for channel id

 <meta-data
 android:name="com.google.firebase.messaging.default_notification_channel_id"
 android:value="@string/default_notification_channel_id"/> 
Rajasekaran M
  • 2,478
  • 2
  • 20
  • 30