如何添加大文字'或者'收件箱样式'这个Firebase android项目的通知?

时间:2016-12-08 02:27:55

标签: android firebase push-notification android-notifications firebase-notifications

我尝试从Firebase控制台发送推送通知,目前我可以将消息从我的Firebase控制台发送到我的虚拟设备,但如果消息很长,它将无法完全显示在通知栏中。

这是Firebasemessagingservice的代码:

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从我的服务器发送长通知。

$(document).ready(function(){

  var total = 5;
  var remain;

  var $foo = $("#foo");
  var $bar = $("#bar");
  var $ext = $("#ext");

  recalculateMax = function(el)
  {
    switch (el) {
      case $foo[0]:
        remain = total - $bar.val() - $ext.val();
        remain = remain < 0 ? 0 : remain
        $foo.val(($foo.val() <= remain) ? $foo.val() : remain);
        break;
      case $bar[0]:
        remain = total - $foo.val() - $ext.val();
        remain = remain < 0 ? 0 : remain
        $bar.val(($bar.val() <= remain) ? $bar.val() : remain);
        break;
      case $ext[0]:
        remain = total - $foo.val() - $bar.val();
        remain = remain < 0 ? 0 : remain
        $ext.val(($ext.val() <= remain) ? $ext.val() : remain);
        break;
    } 
  }
  
});

1 个答案:

答案 0 :(得分:2)

参考此 link ,您仍然无法通过Firebase以大通知方式发送推送通知。它始终处于简单的单一状态通知样式,除非Firebase库添加此功能并开始支持它。

但是,您可以调整它以适合自己的方式工作。但是要注意,如果您要发送数据,则无法执行此过程通过Firebase项目控制台的通知部分只有当您的应用具有后端并且通过网络发送推送通知时,才能执行此操作。

  1. 使用&#34; 数据&#34;在您的有效负载中发送通知数据键,不是&#34;通知&#34;键即可。这可确保在收到推送时始终触发 FirebaseMessagingService 类中的 onMessageReceived(RemoteMessage remoteMessage)方法。如果您在&#34;通知&#34;中发送数据密钥,如果您的应用未打开,您的应用会以简单的通知方式(这不是我们想要的)自动处理。
  2. 现在我们确保所有推送数据都直接来到FirebaseMessagingService类中的 onMessageReceived(RemoteMessage remoteMessage)方法,而不是由它自己创建所有通知,您需要从收到的数据中创建通知。这是附加的示例代码,用于此目的:

    @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());
    
    }
    
  3. 这部分是使通知变大的原因。

    .setStyle(new NotificationCompat.BigTextStyle().bigText(message))
    

    现在您甚至可以在推送通知中发送文章了! 希望这有帮助