[英]How to handle the Firebase notification when app is in foreground
I have integrated Firebase Cloud Messaging with my application. 我已将Firebase Cloud Messaging与我的应用程序集成在一起。 When I sent a notification from the Firebase console, if the app is in background or not opened I receive successfully the notification, otherwise if the app is in foreground or opened, I did not receive it.
当我从Firebase控制台发送通知时,如果该应用程序在后台或未打开,则我会成功收到该通知,否则,如果该应用程序在前台或已打开,则不会收到该通知。
All suggestions are appreciated. 所有建议表示赞赏。
When app is in foreground, notifications are not generated themselves. 当应用程序处于前台时,不会自行生成通知。 You need to write some additional code.
您需要编写一些其他代码。 When message is received
onMessageReceived()
method is called where you can generate the notification. 收到消息后,将调用
onMessageReceived()
方法,您可以在其中生成通知。 Here is the 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
never work when the app is in foreground. 当应用程序处于前台状态时,
FirebaseMessagingService
永远无法工作。 In this case if you want to receive the message from FCM then WakefulBroadcastReceiver
will work for you 在这种情况下,如果您想从FCM接收消息,则
WakefulBroadcastReceiver
将为您工作
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());
}
}
Link firebase
with GCM
in play store and write the below code in manifest 将
firebase
与Play商店中的GCM
链接,并在清单中编写以下代码
<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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.