首先,让我告诉您到目前为止我做了什么。 我经历了很多搜索,包括
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>
答案 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"
}
}
希望这会有所帮助:)