1

Я пытаюсь отправить push-уведомление с консоли Firebase, в настоящее время я могу отправить сообщение с моей консоли Firebase на мое виртуальное устройство, но если сообщение длинное, оно не будет полностью отображаться на панели уведомлений.Как добавить уведомление об «большом тексте» или «в почтовом ящике» для этого проекта Firebase android?

Это код Firebasemessagingservice:

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()); 
} 
+0

Каков ваш вопрос? – Nico

+0

Как я могу изменить свой код, поэтому, когда я отправляю уведомление на виртуальное устройство, я могу расширить уведомление. – kazamama

ответ

1

Ссылаясь на этот link, вы все еще не можете отправить уведомление принудительного через Firebase в большом стиле уведомлений. Он всегда будет в стиле простого уведомления, если Firebase Library не добавит эту функцию и не начнет ее поддерживать.

Однако вы можете настроить его, чтобы работать на вашем пути. Но указывается, этот процесс невозможен, если вы отправляете данные через раздел уведомлений вашей консоли Firebase Project. Это можно сделать, только если ваше приложение имеет бэкэнд и push-уведомление отправляется через Интернет.

  1. Отправить уведомление данных в вашей полезной нагрузки с помощью «данных» ключ, не «уведомление» ключ. Это гарантирует, что onMessageReceived (RemoteMessage remoteMessage) метод в Класс FirebaseMessagingService всегда запускается в любое время, когда принимается нажатие. Если вы отправляете данные в «уведомлении», и если ваше приложение не открыто, оно будет обрабатываться автоматически вашим приложением в простом стиле уведомления (, который не является тем, что мы хотим).
  2. Теперь, когда мы убедились, все нажим данные поступают непосредственно в наш onMessageReceived (RemoteMessage remoteMessage) метода в классе FirebaseMessagingService без создания уведомления о всех по его усмотрению, вы должны создать уведомление из полученных данных. Вот пример кода прилагается служить этой целью:

    @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)) 

Теперь вы можете даже отправить статью в свои push-уведомления! Надеюсь, это поможет!