当App不在前台或未运行时,Remoteview会显示系统通知,而不是“自定义通知”

时间:2019-07-09 05:58:27

标签: android push-notification remoteview custom-notificaiton

首先,让我告诉您到目前为止我做了什么。 我经历了很多搜索,包括

Remoteview is not applied in background

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

  

此外,我已经引用了GitHub和许多文章,但是这些文章都不对我有用,这就是我发布此问题的原因,所以请不要将此内容标记为重复。

当应用程序运行时,它可以正常工作,但是当应用程序在后台时,它会显示系统通知。

我们是否需要添加custom_notification_layout引用以显示清单?(是否有meta tag或其他内容?)

  

这是MyFireBaseMessagingService.java

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);
    }
}
  

这是layout_remainder_with_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="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>
  

这是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 个答案:

答案 0 :(得分:1)

  

从ServerSide

请确保“您正在NOT发送notification中的notification payload字段如果要发送?,然后请从服务器请求中删除notification字段,并仅发送数据

因为您的应用在后台运行时,Android会NOT执行onMessageReceived,系统将接管该通知并显示“正常通知”。

因此,在通知有效载荷中仅发送“ data”。 另外,在您的通知有效内容中添加{"priority": "high"}

  

以下是服务器响应的示例

{
  "to": "your_fcm_token",
  "priority": "high",
  "data":{
    "title": "Your title",
    "msg": "your msg",
    "other_info": "etc"
  }
}

希望这会有所帮助:)