Firebase推送通知 – 如何在通知中显示多行消息

获取推送通知message只在一行中 ,而我期待它与BigPictureStyleBase (都是通知样式)的multiple lines

请参阅附件屏幕截图 ,而在此图片中,我们只展示"Hello from Firebase Cloud Messaging"因此它适合单行本身。

但事实是,如果我试图展示“来自Firebase云消息传递和再次来自Firebase云消息的Hello”,即使这样,我在single line only 三个点的消息single line only ,如下所示

在这里输入图像说明

这是我使用的代码的必需part

 NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setLargeIcon(image)/*Notification icon image*/ .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle(messageTitle) .setContentText(messageBody) .setStyle(new NotificationCompat.BigPictureStyle() .bigPicture(image) .setBigContentTitle(messageTitle) .setSummaryText(Html.fromHtml(messageBody) .toString()))/*Notification with Image*/ .setAutoCancel(true) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); 

注意:同样的问题,我面临的任何时候,我发送没有大图像 (基本/简单推送通知)

看这个截图

在这里输入图像说明

所以, 唯一的问题如何在通知中显示多行消息?

Solutions Collecting From Web of "Firebase推送通知 – 如何在通知中显示多行消息"

你几乎拥有它,你只需要设置bigText属性。

  NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher) .setAutoCancel(true); NotificationCompat.BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle(); bigTextStyle.setBigContentTitle("Title"); bigTextStyle.bigText("Lorem ipsum dolor sit amet, consectetur adipiscing elit," + " sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " + "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris " + "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in."); notificationBuilder.setStyle(bigTextStyle); NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); mNotifyMgr.notify(1, notificationBuilder.build()); 

多

你应该使用你自己的布局:

 Builder builder = new Builder(context); builder.setSmallIcon(R.drawable.star_white) builder.setAutoCancel(true) builder.setContentIntent(pendingIntent); builder.setPriority(NotificationCompat.PRIORITY_MAX); RemoteViews remoteViewsBig = new RemoteViews(context.getPackageName(), R.layout.notification_big); RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.notification_small); remoteViewsBig.setImageViewBitmap(R.id.banner, bitmap); remoteViewsBig.setTextViewText(R.id.button, data.getButtonText()); remoteViews.setTextViewText(R.id.button, data.getButtonText()); remoteViewsBig.setTextViewText(R.id.text_title, data.getTitle()); remoteViews.setTextViewText(R.id.text_title, data.getTitle()); remoteViewsBig.setTextViewText(R.id.text_content, data.getContent()); remoteViews.setTextViewText(R.id.text_content, data.getContent()); builder.setCustomContentView(remoteViews); builder.setCustomBigContentView(remoteViewsBig); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(notificationId, builder.build()); 

和xml文件:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/custom_blue_gray_800" android:orientation="horizontal" > <ImageView android:layout_width="44dp" android:layout_height="44dp" android:layout_gravity="center" android:src="@mipmap/ic_launcher" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="12dp" android:layout_marginRight="12dp" android:layout_weight="1" android:gravity="center_vertical" android:orientation="vertical" android:padding="8dp" > <TextView android:id="@+id/text_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" android:textSize="16sp" tools:text="Title" /> <TextView android:id="@+id/text_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/darker_gray" android:textSize="14sp" tools:text="text\ntext\ntext" /> </LinearLayout > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="36dp" android:layout_gravity="center_vertical" android:background="@drawable/button_main" android:text="Click" android:textColor="@android:color/white" android:textSize="12sp" /> </LinearLayout > 

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/custom_blue_gray_800" android:orientation="vertical" android:paddingLeft="12dp" android:paddingRight="12dp" android:paddingBottom="12dp" > <include layout="@layout/notification_small" /> <ImageView android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="match_parent" android:adjustViewBounds="true" android:scaleType="centerCrop" /> </LinearLayout > 

尝试这个:-

 NotificationCompat.Builder builder = new NotificationCompat.Builder( context); Notification notification = builder.setContentIntent(contentIntent) .setSmallIcon(icon).setTicker(appname).setWhen(0) .setAutoCancel(true).setContentTitle(appname) .setStyle(new NotificationCompat.BigTextStyle().bigText(message)) .setContentText(message).build(); notificationManager.notify(0, notification); 

您可以使用@Dus答案显示多行…但是对于bigPictureSyle它总是在setSummaryText方法中有单行,其他选项是创buildRemoteView并按照您所需的devise实现UI

对于RemoteView请参阅此

我希望这是习惯于你。 检查这个:

  NotificationCompat.Builder builder = new NotificationCompat.Builder( context); Notification notification = builder.setContentIntent(contentIntent) .setSmallIcon(icon).setTicker(appname).setWhen(0) .setAutoCancel(true).setContentTitle(appname) .setStyle(new NotificationCompat.BigTextStyle().bigText(message)) .setContentText(message).build(); notificationManager.notify(0, notification); 

请参阅此链接: 多行显示通知

谢谢…

这是我如何在通知中显示大图像和一些多行文本。 这是我的项目中的工作代码。

fcm中有2种fcm消息。 Display MessagesData Messages 。 我正在使用Data Messages来处理前景和后台的fcm通知。

  /** * Created by Mohammed Farhan on 01-08-2017. */ public class MyFirebaseMessagingService extends FirebaseMessagingService { private static final String TAG = "MyFirebaseMsgService"; private AppAuth auth; @Override public void onMessageReceived(RemoteMessage remoteMessage) { } /*To check if remoteMessage is empty, if not empty then read the id from "title" field*/ if (remoteMessage.getData().size() > 0) { Map<String, String> data = remoteMessage.getData(); String title = data.get("title"); sendNotification(title); Log.d(TAG, title.toString()); } } private void sendNotification(String title) { final String id = title; /* Here DataFromServer is custom method, used to sync data from my server. It has interface method to listen it when data sync and adding it to local sql completes*/ DataFromServer dataFromServer = new DataFromServer(this); dataFromServer.setDataLoadCompleteListener(new DataLoadCompleteListener() { @Override public void dataLoadComplete() { /*AppNotificationDAO is a class which has many DAO(Data Access Object) method. I have used DAO to make ease in saving,querying data from local sql*/ AppNotificationDAO appNotificationDAO = new AppNotificationDAO(MyFirebaseMessagingService.this); /*getAppNotificationByID is DAO method which does server communication and fetch data from it based on Id(Here its notificationId)*/ AppNotification appNotification = appNotificationDAO.getAppNotificationByID(Long.valueOf(id)); if (appNotification != null) { if (appNotification.getPhoto().equalsIgnoreCase("NA")) { /* photo is a field in my AppNotification class and getPhoto() is getter and appNotification.getPhoto() returns the value stored in it. Here am using it to save url of image related to notification in my web app*/ /*if url is not present then below method displays just a text as notification*/ showBigTextStyleNotification(appNotification); } else { /*if there is url then am running asyncTask to get bitmap of that image and show it in notification tray along with text. Below method does that*/ new showBigPictureStyleNotification(MyFirebaseMessagingService.this, appNotification.getMessage(), Links.NOTIFICATION_IMAGE + "/" + appNotification.getPhoto(), appNotification) .execute(); /* am passing some variables inside above methods, and Links is a class where have defined some strings (links) to my webapp*/ } } } }); dataFromServer.getAppNotificationFromServer(Long.valueOf(id)); } private void displayNotification(AppNotification appNotification) { Intent intent = new Intent(MyFirebaseMessagingService.this, NotificationListActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(MyFirebaseMessagingService.this, 0, intent, PendingIntent.FLAG_ONE_SHOT); Uri notificationSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder builder = new NotificationCompat.Builder(this); builder.setContentTitle("KSP_PQRS"); builder.setContentText(appNotification.getSubject()); builder.setContentIntent(pendingIntent); builder.setSmallIcon(R.drawable.notification); builder.setSound(notificationSoundUri); builder.build(); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(100, builder.build()); } private void showBigTextStyleNotification(AppNotification appNotification) { Bitmap icon1 = BitmapFactory.decodeResource(getResources(), R.drawable.police_logo); android.support.v4.app.NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( this).setAutoCancel(true) .setContentTitle(appNotification.getSubject()) .setSmallIcon(R.drawable.police_logo) .setLargeIcon(icon1) .setContentText(appNotification.getMessage()); NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle(); bigText.bigText(appNotification.getMessage()); bigText.setBigContentTitle(appNotification.getSubject()); bigText.setSummaryText(getResources().getString(R.string.app_name)); mBuilder.setStyle(bigText); mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); mBuilder.setPriority(NotificationCompat.PRIORITY_MAX); // Creates an explicit intent for an Activity in your app Intent resultIntent; if (appNotification.getType().equalsIgnoreCase("GEN")) { resultIntent = new Intent(this, NotificationListActivity.class); } else { resultIntent = new Intent(this, MainActivity.class); } TaskStackBuilder stackBuilder = TaskStackBuilder .create(this); stackBuilder.addParentStack(MainActivity.class); stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(resultPendingIntent); NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(((int) appNotification.getId()) + 1000, mBuilder.build()); } private class showBigPictureStyleNotification extends AsyncTask<String, Void, Bitmap> { private Context mContext; private String title, message, imageUrl; AppNotification appNotification; showBigPictureStyleNotification(Context context, String message, String imageUrl, AppNotification appNotification) { super(); this.mContext = context; this.title = getResources().getString(R.string.app_name); this.message = message; this.imageUrl = imageUrl; this.appNotification = appNotification; } @Override protected Bitmap doInBackground(String... params) { InputStream in; try { auth = new AppAuthDAO(mContext).getAppAuth(); byte[] toEncrypt = (auth.getUsername() + ":" + auth.getPassword() + ":" + auth.getDeviceId()).getBytes(); String encryptedCredentials = Base64.encodeToString(toEncrypt, Base64.NO_WRAP); URL url = new URL(this.imageUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.setRequestProperty("Authorization", "Basic " + encryptedCredentials); connection.connect(); in = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(in); return myBitmap; } catch (IOException e) { e.printStackTrace(); } return null; } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); Intent intent; if (appNotification.getType().equalsIgnoreCase("GEN")) { intent = new Intent(mContext, NotificationListActivity.class); } else { intent = new Intent(mContext, MainActivity.class); } PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 100, intent, PendingIntent.FLAG_ONE_SHOT); NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); Notification notif = new Notification.Builder(mContext) .setContentIntent(pendingIntent) .setContentTitle(title) .setContentText(appNotification.getSubject()) .setTicker(message) .setSubText(message) .setSmallIcon(R.drawable.police_logo) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.police_logo)) /*using setStyle am setting big image along with some lines of text in notifications*/ .setStyle(new Notification.BigPictureStyle().bigPicture(result)) .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) .build(); notif.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(((int) appNotification.getId()) + 1000, notif); } } }