如何在 Android 应用程序处于后台时从 firebase-message 获取数据

我正在使用 firebase 控制台发送 firebase 消息。这些消息应包含如下所示的附加数据,目的是在我的应用程序的 webview 中打开特定的 URL:

http://img4.mukewang.com/642685d000011efd06480518.jpg

我设置了我的清单和 firebase 类来获取消息。在我的 firebase 类中,我尝试获取数据:


@Override

public void onMessageReceived(RemoteMessage remoteMessage) {

    super.onMessageReceived(remoteMessage);

    Intent intent = new Intent(this, MainActivity.class);

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    if(remoteMessage.getData().containsKey("key1")) {

        intent.putExtra("destination", remoteMessage.getData().get("key1"));

    }

    PendingIntent pendingIntent = PendingIntent.getActivity

    (this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    String channelId = "default";

    NotificationCompat.Builder builder;

    if (remoteMessage.getNotification() != null ) {

        if (remoteMessage.getNotification().getTitle() != null) {

            builder = new NotificationCompat.Builder(this, channelId)

                    .setSmallIcon(R.drawable.ic_stat_onesignal_default)

                    .setContentTitle(remoteMessage.getNotification().getTitle())

                    .setStyle(new NotificationCompat.BigTextStyle().bigText(remoteMessage.getNotification().getBody()))

                    .setAutoCancel(true)

                    .setContentIntent(pendingIntent);

        } else {

            builder = new NotificationCompat.Builder(this, channelId)

                    .setSmallIcon(R.drawable.ic_stat_onesignal_default)

                    .setStyle(new NotificationCompat.BigTextStyle().bigText(remoteMessage.getNotification().getBody()))

                    .setAutoCancel(true)

                    .setContentIntent(pendingIntent);

        }

但如果应用程序从后台启动,则事件不会触发。我试图获取意图并检查活动的 onResume() 事件中的密钥,但它不起作用(在 inCreate() 和 onStart() 中相同)。


有谁能够帮助我?


慕神8447489
浏览 208回答 4
4回答

慕码人8056858

推送消息有3种类型通知数据和两者推送消息基本上是一个 json 负载:payload:{    notificacion...    data}每种类型的推送消息的规则是不同的。在您的情况下,您正在使用 Firebase Web 控制台并添加自定义数据,这意味着您的有效负载将包含通知和数据。对于组合类型,背景中的行为是使用默认通知(NotificationCompat,视觉类型)并打开清单中注册的默认活动。在活动中,您可以获得数据。假设您的默认活动称为 MainActivitypublic class MainActivity {    onCreate...{    //... usual stuff    Intent fcmIntent = getIntent();    if fcmIntent != null    //check the extras and forward them to the next activity if needed    }}

慕森卡

有两种类型的推送消息(1)Notification Message(应用在前台时会收到)(2)Data Message(app在后台+前台时会收到)

慕尼黑的夜晚无繁华

您需要在 firebase 通知数据集中设置 click_action 才能从后台接收数据并实现 onMessageReceived 来处理前台数据

慕容708150

我解决了这个购买处理通知,handleIntent当应用程序被杀死时,在后台和前台。我完全忽略了该onMessageReceived(@NonNull RemoteMessage message)方法,因为当应用程序处于后台时它似乎不起作用。@Override    public void handleIntent(Intent intent) {        Log.d( "FCM", "handleIntent \n"+intent.getStringExtra("data"));        String messageTitle = intent.getStringExtra("title");        String messageBody = intent.getStringExtra("body");        //from here pass the values to a method to show your notification.            }在您的活动中,您将能够从意图中检索任何数据。要重定向到您想要的活动,您必须将 click_action 添加到您的负载中。这是我的有效负载的样子:"notification": {  "body": "Your message is here",  "title": "Hey Robby",  "discount_code": "baba-blacksheep",  "uid": "2",  "click_action": "OPEN_ACTIVITY_FROM_NOTIFICATION"}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java