kazamama
kazamama

Reputation: 73

How to add 'big text' or 'inbox style' notification for this Firebase android project?

I'm trying to send a push notification from the Firebase console, currently I can send a message from my Firebase console to my virtual device, but if the message is long it will not be fully displayed in the notification bar.

This is the code for the 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());
    }


}

Thanks Adib for the detailed answer, I already have a PHP backend server but whenever I try to send a long notification from the server it will not display fully, my question is can I only edit the last part of the code so I can send long notifications from my server either using inboxStyle or 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());
}

Upvotes: 6

Views: 5222

Answers (1)

Riddhiman Adib
Riddhiman Adib

Reputation: 398

Referring to this link, you still cannot send Push notification via Firebase in big notification style. It'll always be in s simple single notification style, unless Firebase Library adds this feature and starts supporting it.

However, you can tweak it to work in your way. But point to be noted, this process is not possible if you're sending data via the Notification section of your Firebase Project console. This can be done only if your app has a backend and push notification is sent via web.

  1. Send notification data in your payload using the "data" key, not the "notification" key. This makes sure the onMessageReceived(RemoteMessage remoteMessage) method in FirebaseMessagingService class is always triggered anytime a push is received. If you send data in "notification" key and if your app is not open, it'll be handled automatically by your app in simple notification style (which is not what we want).
  2. Now that we've made sure all push data comes directly to our onMessageReceived(RemoteMessage remoteMessage) method in FirebaseMessagingService class without creating a Notification all by it's own, you need to create a Notification out of the data received. Here's a sample code attached to serve that purpose:

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

This part is what makes the notification big.

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

Now you can even send an article in your push notifications! Hope this helps!

Upvotes: 4

Related Questions