Firebase onMessageReceived(RemoteMessage remoteMessage),当应用程序在后台时不被调用[重复]
Posted
技术标签:
【中文标题】Firebase onMessageReceived(RemoteMessage remoteMessage),当应用程序在后台时不被调用[重复]【英文标题】:Firebase onMessageReceived(RemoteMessage remoteMessage), is not called when the app is in background [duplicate] 【发布时间】:2017-04-21 22:51:21 【问题描述】:在 Firebase onMessageReceived(RemoteMessage remoteMessage)
中,当您的应用处于前台时,将调用此方法。因此,点击通知后,您可以打开不同的 Activity,例如 NotiicationActivity
。
但是如果你的应用程序在后台,那么这个方法将不会被调用,并且在点击通知时只会打开一个 Launcher Activity。
那么即使我们的应用程序在后台,如何在点击通知时打开NotificationActivity
。
我的代码是这样的:
public class MyFirebaseMessagingService extends FirebaseMessagingService
private static final String TAG = "MyFirebaseMsgService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
Log.d(TAG, "From: " + remoteMessage.getFrom());
if (remoteMessage.getData().size() > 0)
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
if (remoteMessage.getNotification() != null)
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
sendNotification(remoteMessage.getNotification().getBody());
private void sendNotification(String messageBody)
Intent intent = new Intent(this, NewActivity.class);
intent.putExtra("key", messageBody);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT);
Bitmap icon2 = BitmapFactory.decodeResource(getResources(),
R.mipmap.ic_launcher);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("FCM Sample")
.setContentText(messageBody)
.setAutoCancel(true)
.setLargeIcon(icon2)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(new Random().nextInt() /* ID of notification */, notificationBuilder.build());
【问题讨论】:
阅读这个答案:解决了这个问题here is the link 【参考方案1】:onMessageReceived 仅在应用程序处于前台时触发。 如果应用处于后台,您可能仍能收到通知,但不会触发 onMessageReceived。
所以我的建议, 在接收活动中,您仍然可以使用以下方法从通知中获取数据:
getIntent().getExtras();
这应该会相应地工作。希望这会有所帮助:)
【讨论】:
谢谢这个作品,我刚做了这个。if (getIntent().getExtras() != null) // I Wrote here. Intent intent = new Intent(MainActivity.this, NotificationActivity.class); startActivity(intent);
不用担心@Shekhar,请投票,以便其他人知道此解决方案有效。谢谢。
消息有数据消息和通知消息两种。无论应用程序是在前台还是后台,数据消息都在 onMessageReceived 中处理。仅当应用程序处于后台时通知消息【参考方案2】:
尝试点击以下链接:
Firebase Cloud Messaging for android
【讨论】:
本教程仅在您的应用程序处于前台时有效。即使应用程序在后台,甚至没有启动,我也想打开 NotificationActivity。【参考方案3】:在你的 sendNotification() 方法中:
private void showNotification(String message)
Intent intent=new Intent(this, NotificationActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("key", messageBody);
PendingIntent pendingIntent=PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder=new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentTitle("FCM Sample")
.setContentText(message)
.setLargeIcon(icon2)
.setContentIntent(pendingIntent);
NotificationManager manager=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(0,builder.build());
【讨论】:
请找到以下链接以获得问题的正确解决方案。 ***.com/a/56660363/1752341以上是关于Firebase onMessageReceived(RemoteMessage remoteMessage),当应用程序在后台时不被调用[重复]的主要内容,如果未能解决你的问题,请参考以下文章
无法从“firebase.js”解析模块“firebase”:在项目中找不到 Firebase
VueJS + Firebase 使用 Firebase 绑定
无法解决:com.google.firebase:firebase-ml-vision:24.1.3;无法解决:com.google.firebase:firebase-core:20.0.2
没有创建 Firebase 应用“[DEFAULT]” - 在 Flutter 和 Firebase 中调用 Firebase.initializeApp()
如何修复 Firebase 9.0 导入错误? “尝试导入错误:‘firebase/app’不包含默认导出(导入为‘firebase’)。”