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