1

我試圖從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()); 
    } 


} 

感謝阿迪的詳細解答,我已經有一個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項目控制檯的通知部分發送數據,則無法執行此過程。 只有當您的應用程序具有後端並且通過網絡發送推送通知時,才能完成此操作。使用「數據」鍵,不是「通知」鍵在有效載荷

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

現在,您甚至可以在您的推送通知中發送文章! 希望這會有所幫助

相關問題