web-dev-qa-db-fra.com

Comment gérer la notification Firebase lorsque l'application est au premier plan

J'ai intégré Firebase Cloud Messaging à mon application. Lorsque j'ai envoyé une notification à partir de la console Firebase, si l'application est en arrière-plan ou n'est pas ouverte, je reçois correctement la notification, sinon si l'application est au premier plan ou ouverte, je ne l'ai pas reçue.

Toutes les suggestions sont appréciées.

20
Uma Achanta

Lorsque l'application est au premier plan, les notifications ne sont pas générées elles-mêmes. Vous devez écrire du code supplémentaire. Lorsque le message est reçu, la méthode onMessageReceived() est appelée pour générer la notification. Voici le code:

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        Log.d("msg", "onMessageReceived: " + remoteMessage.getData().get("message"));
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
        String channelId = "Default";
        NotificationCompat.Builder builder = new  NotificationCompat.Builder(this, channelId)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(remoteMessage.getNotification().getTitle())
                .setContentText(remoteMessage.getNotification().getBody()).setAutoCancel(true).setContentIntent(pendingIntent);;
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(channelId, "Default channel", NotificationManager.IMPORTANCE_DEFAULT);
            manager.createNotificationChannel(channel);
        }
        manager.notify(0, builder.build());
    }
}
50
Shivam Bhusri

FirebaseMessagingService ne fonctionne jamais lorsque l'application est au premier plan. Dans ce cas, si vous souhaitez recevoir le message de FCM, WakefulBroadcastReceiver fonctionnera pour vous.

public class FirebaseDataReceiver extends WakefulBroadcastReceiver {


        @Override
        public void onReceive(Context context, Intent intent) {

            Log.d("BroadcastReceiver::", "BroadcastReceiver");
            NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle(intent.getExtras().getString("title"))
                    .setContentText(intent.getExtras().getString("message"));
            NotificationManager manager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
            manager.notify(0, builder.build());
        }
    }

Liez firebase avec GCM dans le Play Store et écrivez le code ci-dessous dans le manifeste

<receiver
    Android:name=".firebase.FirebaseDataReceiver"
    Android:exported="true"
    Android:permission="com.google.Android.c2dm.permission.SEND">
    <intent-filter>
        <action Android:name="com.google.Android.c2dm.intent.RECEIVE" />
    </intent-filter>
</receiver>
2
ramana vv