Search code examples
androidfirebase-cloud-messagingreact-native-push-notification

FCM remote notification, provided icon not used in foreground


I am trying to change the notification Icon used according to the payloads in a react-native project on the android side. Here's the payload:

{"GCM": "{\"notification\": { \"text\": \"text\", \"title\": \"Title\", \"icon\":\"ic_stat_logo\", \"color\":\"#FA8072\"}}"}

What I am getting, however, is that when the app is in the background or closed the notification icon displayed is the one I provided, but in the foreground, it displays the app icon instead.

I tried to look at the documentation but nothing has been found after searching for a long time. Is this an android restriction if so any way to bypass it?

Also here's the manifest:

<application
    android:name=".MainApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:theme="@style/AppTheme"
    android:usesCleartextTraffic="true"
    android:requestLegacyExternalStorage="true"
    android:largeHeap="true">

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


    <meta-data  android:name="com.dieam.reactnativepushnotification.notification_channel_name"
                android:value="@string/channel_name"/>
    <meta-data android:name="com.dieam.reactnativepushnotification.notification_channel_description" android:value="@string/channel_description"/>

    <!-- Change the value to true to enable pop-up for in foreground (remote-only, for local use ignoreInForeground) -->
    <meta-data  android:name="com.dieam.reactnativepushnotification.notification_foreground"
        android:value="true"/>
    <!-- Change the resource name to your App's accent color - or any other color you want -->
    <meta-data  android:name="com.dieam.reactnativepushnotification.notification_color"
        android:resource="@color/white"/> <!-- or @android:color/{name} to use a standard color -->

    <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationPublisher" />
    <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationBootEventReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

    <service
        android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationListenerService"
        android:exported="false" >
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

    <activity
        android:name=".MainActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
        android:launchMode="singleTask"
        android:fitsSystemWindows="true"
        android:label="@string/app_name"
        android:windowSoftInputMode="adjustPan"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Solution

  • The issue didn't come from the configuration, but rather from the library react-native-push-notification which didn't take smallIcon attribute into account.