Remoteview displays system notification when App is not in the foreground or not running instead of Custom Notification

戏子无情 提交于 2019-12-12 18:54:11

问题


First of all, let me tell you what I have done so far. I have gone through lots of searching including

Remoteview is not applied in background

firebase_messaging not customizing notification when an app is not in the foreground

Also, I have referred GitHub and lots of articles but none of these worked for me so that is the reason I am posting this question, so please do not mark this as duplicate.

Its Working fine when App is Running, but it displays system notification when the app is in background.

Do we need to add custom_notification_layout reference to manifest? (is there any meta tag or anything?)

This is MyFireBaseMessagingService.java class

public class MyFireBaseMessagingServiceTmp extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        JSONObject jsonObject = new JSONObject(remoteMessage.getData());
        String title = jsonObject.optString("title");
        String message = jsonObject.optString("message");

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT >= 26) {
            NotificationChannel channel = new NotificationChannel("my_notifications", "My notifications", NotificationManager.IMPORTANCE_DEFAULT);
            notificationManager.createNotificationChannel(channel);
        }
        RemoteViews remoteViews;
        if (title == "BIG BANG") {
            remoteViews = new RemoteViews(getPackageName(), R.layout.layout_remainder_with_buttons);
        } else {
            remoteViews = new RemoteViews(getPackageName(), R.layout.layout_remainder_no_buttons);
        }
        remoteViews.setTextViewText(R.id.txtTitle, title);
        remoteViews.setTextViewText(R.id.txtMsg, message);

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "my_notifications");
        notificationBuilder.setAutoCancel(true);
        notificationBuilder.setCustomBigContentView(remoteViews);
        {
            Intent intentGotIt = new Intent("ACTION_GOT_IT");
            PendingIntent pendingIntentGotIt = PendingIntent.getBroadcast(this, 0, intentGotIt, PendingIntent.FLAG_ONE_SHOT);
            remoteViews.setOnClickPendingIntent(R.id.btnGotIt, pendingIntentGotIt);
        }
        {
            Intent intentSnooze = new Intent("ACTION_SNOOZE");
            PendingIntent pendingIntentSnooze = PendingIntent.getBroadcast(this, 0, intentSnooze, PendingIntent.FLAG_ONE_SHOT);
            remoteViews.setOnClickPendingIntent(R.id.btnSnooze, pendingIntentSnooze);
        }
        notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
        notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
        notificationBuilder.setAutoCancel(true);
        Bitmap icon = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
        notificationBuilder.setLargeIcon(icon);
        Notification notification = notificationBuilder.build();
        notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        notification.vibrate = new long[]{0, 400, 200, 400};
        notificationManager.notify(1000, notification);
    }
}

This is layout_remainder_with_buttons.xml layout

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="110dp"
        android:background="@drawable/bg_gradient_blue">

        <ImageView
            android:id="@+id/ivLogo"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_centerVertical="true"
            android:layout_marginStart="10dp"
            android:layout_marginTop="10dp"
            android:layout_marginEnd="5dp"
            android:layout_marginBottom="10dp"
            android:src="@drawable/logo_round" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_toEndOf="@+id/ivLogo"
        android:gravity="center_vertical"
        android:orientation="vertical"
        android:padding="5dp">

        <TextView
            android:id="@+id/txtTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/white"
            android:textSize="16sp"
            android:textStyle="bold"
            tools:text="Notification title" />

        <TextView
            android:id="@+id/txtMsg"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/txtTitle"
            android:textColor="@color/white"
            android:textSize="14sp"
            tools:text="Notification msg" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            tools:visibility="visible">

            <Button
                android:id="@+id/btnGotIt"
                android:layout_width="100dp"
                android:layout_height="30dp"
                android:layout_marginEnd="10dp"
                android:background="@drawable/bg_button_oval_green"
                android:gravity="center"
                android:padding="5dp"
                android:text="Got it...!"
                android:textAllCaps="true"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <Button
                android:id="@+id/btnSnooze"
                android:layout_width="100dp"
                android:layout_height="30dp"
                android:layout_marginStart="10dp"
                android:layout_marginEnd="10dp"
                android:background="@drawable/bg_button_oval_red"
                android:gravity="center"
                android:padding="5dp"
                android:text="Snooze"
                android:textAllCaps="true"
                android:textColor="@color/white"
                android:textStyle="bold" />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

This is layout_remainder_no_buttons.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:background="@drawable/bg_gradient_blue">

    <ImageView
        android:id="@+id/ivLogo"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_centerVertical="true"
        android:layout_marginStart="10dp"
        android:layout_marginEnd="5dp"
        android:src="@drawable/logo_round" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_toEndOf="@+id/ivLogo"
        android:gravity="center_vertical"
        android:orientation="vertical"
        android:padding="5dp">

        <TextView
            android:id="@+id/txtTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Remainder"
            android:textColor="@color/white"
            android:textSize="16sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/txtMsg"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/txtTitle"
            android:ellipsize="end"
            android:maxLines="2"
            android:text="Its time to place order for `For Father`"
            android:textColor="@color/white"
            android:textSize="14sp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/txtMsg"
            android:gravity="center_vertical|center_horizontal"
            android:orientation="horizontal"
            android:visibility="gone">

            <Button
                android:id="@+id/btnSave"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:layout_marginStart="10dp"
                android:layout_marginEnd="10dp"
                android:layout_weight="1"
                android:background="@null"
                android:gravity="center"
                android:padding="5dp"
                android:text="Got it...!"
                android:textAllCaps="true"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <Button
                android:id="@+id/btnCancel"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:layout_marginStart="10dp"
                android:layout_marginEnd="10dp"
                android:layout_weight="1"
                android:background="@null"
                android:gravity="center"
                android:padding="5dp"
                android:text="Snooze"
                android:textAllCaps="true"
                android:textColor="@color/app_red"
                android:textStyle="bold" />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

回答1:


From ServerSide

Please make sure that "You are NOT sending "notification" field in the "notification payload" and if you are sending? then please Remove notification field from your server request and send the only data.

because when your app is in the background than Android will NOT execute onMessageReceived and system will take over that notification and will show "Normal Notification".

So, send only "data" in your notification payload. Also add {"priority": "high"} in your notification payload.

Here is the example for server response

{
  "to": "your_fcm_token",
  "priority": "high",
  "data":{
    "title": "your_title",
    "msg": "your_message",
    "other_info": "extra_info"
  }
}

Hope this will help:)



来源:https://stackoverflow.com/questions/56946146/remoteview-displays-system-notification-when-app-is-not-in-the-foreground-or-not

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!