如何为这个 Firebase android 项目添加 'big text' 或 'inbox style' 通知?
How to add 'big text' or 'inbox style' notification for this Firebase android project?
我正在尝试从 Firebase 控制台发送推送通知,目前我可以从我的 Firebase 控制台向我的虚拟设备发送一条消息,但如果消息很长,它将不会完全显示在通知栏中.
这是 Firebase 消息服务的代码:
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import com.google.firebase.messaging.RemoteMessage;
/**
* Created by filipp on 5/23/2016.
*/
public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService{
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
showNotification(remoteMessage.getData().get("message"));
}
private void showNotification(String message) {
Intent i = new Intent(this,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentTitle("Elit")
.setContentText(message)
//.setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(pendingIntent);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(0,builder.build());
}
}
感谢 Adib 的详细回答,我已经有一个 PHP 后端服务器但是每当我尝试从服务器发送一个长通知时它不会完全显示,我的问题是我可以只编辑最后一个代码的一部分,因此我可以使用 inboxStyle 或 bigtextstyle 从我的服务器发送长通知。
private void showNotification(String message) {
Intent i = new Intent(this,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentTitle("Elit")
.setContentText(message)
//.setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(pendingIntent);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(0,builder.build());
}
参考这个 ,您仍然无法通过Firebase以大通知方式发送推送通知。它会始终采用简单的单一通知样式,除非 Firebase 库添加此功能并开始支持它。
但是,您可以调整它以按照您的方式工作。但是需要注意的一点,如果您正在通过您的 Firebase 项目控制台 的通知部分发送数据 。 只有当您的应用程序有后端并且推送通知是通过网络发送时才可以这样做。
- 使用“data”键在您的负载中发送通知数据,而不是 "notification" 键。这确保 onMessageReceived(RemoteMessage remoteMessage) 方法在 FirebaseMessagingService class 总是在收到推送时触发。如果您在 "notification" 键中发送数据并且您的应用程序未打开,它将由您的应用程序以简单的通知样式自动处理(这不是我们想要的) .
现在我们已经确保所有推送数据直接进入 FirebaseMessagingService class 中的 onMessageReceived(RemoteMessage remoteMessage) 方法 class通知都是它自己的,您需要根据收到的数据创建一个通知。以下是用于该目的的示例代码:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, whatToOpen, PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setContentTitle(title)
.setContentText(message)
.setStyle(new NotificationCompat.BigTextStyle().bigText(message))
.setAutoCancel(true)
.setSmallIcon(R.drawable.push_icon_small)
.setLargeIcon(BitmapFactory.decodeResource(this.getResources(),R.drawable.push_icon_large))
.setSound(defaultSoundUri)
.setColor(getResources().getColor(R.color.colorPrimary))
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
这部分是使通知变大的原因。
.setStyle(new NotificationCompat.BigTextStyle().bigText(message))
现在您甚至可以在推送通知中发送文章! 希望对您有所帮助!
我正在尝试从 Firebase 控制台发送推送通知,目前我可以从我的 Firebase 控制台向我的虚拟设备发送一条消息,但如果消息很长,它将不会完全显示在通知栏中.
这是 Firebase 消息服务的代码:
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import com.google.firebase.messaging.RemoteMessage;
/**
* Created by filipp on 5/23/2016.
*/
public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService{
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
showNotification(remoteMessage.getData().get("message"));
}
private void showNotification(String message) {
Intent i = new Intent(this,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentTitle("Elit")
.setContentText(message)
//.setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(pendingIntent);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(0,builder.build());
}
}
感谢 Adib 的详细回答,我已经有一个 PHP 后端服务器但是每当我尝试从服务器发送一个长通知时它不会完全显示,我的问题是我可以只编辑最后一个代码的一部分,因此我可以使用 inboxStyle 或 bigtextstyle 从我的服务器发送长通知。
private void showNotification(String message) {
Intent i = new Intent(this,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentTitle("Elit")
.setContentText(message)
//.setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(pendingIntent);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(0,builder.build());
}
参考这个
但是,您可以调整它以按照您的方式工作。但是需要注意的一点,如果您正在通过您的 Firebase 项目控制台 的通知部分发送数据 。 只有当您的应用程序有后端并且推送通知是通过网络发送时才可以这样做。
- 使用“data”键在您的负载中发送通知数据,而不是 "notification" 键。这确保 onMessageReceived(RemoteMessage remoteMessage) 方法在 FirebaseMessagingService class 总是在收到推送时触发。如果您在 "notification" 键中发送数据并且您的应用程序未打开,它将由您的应用程序以简单的通知样式自动处理(这不是我们想要的) .
现在我们已经确保所有推送数据直接进入 FirebaseMessagingService class 中的 onMessageReceived(RemoteMessage remoteMessage) 方法 class通知都是它自己的,您需要根据收到的数据创建一个通知。以下是用于该目的的示例代码:
@Override public void onMessageReceived(RemoteMessage remoteMessage) { PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, whatToOpen, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setContentTitle(title) .setContentText(message) .setStyle(new NotificationCompat.BigTextStyle().bigText(message)) .setAutoCancel(true) .setSmallIcon(R.drawable.push_icon_small) .setLargeIcon(BitmapFactory.decodeResource(this.getResources(),R.drawable.push_icon_large)) .setSound(defaultSoundUri) .setColor(getResources().getColor(R.color.colorPrimary)) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); }
这部分是使通知变大的原因。
.setStyle(new NotificationCompat.BigTextStyle().bigText(message))
现在您甚至可以在推送通知中发送文章! 希望对您有所帮助!