如何在没有PendingIntent的活动中获取FCM onMessageReceived事件

时间:2017-01-22 16:45:05

标签: android firebase-cloud-messaging

我想在我的应用程序中实现pub / sub,对于该服务器在特定事件中发送通知,我将对我的活动中显示的数据进行一些修改

1 个答案:

答案 0 :(得分:3)

onMessageReceived()不需要PendingIntent进行调用。如果您的设置正确,它将始终呼叫。此link提供应发送到FCM服务器的数据类型

  

使用FCM,您可以向客户端发送两种类型的消息:

     
      
  1. 通知消息,有时被视为“显示消息”。

  2.   
  3. 数据消息,由客户端应用程序处理。

  4.   

如果您希望始终触发仅使用数据消息,那么它将始终触发onMessageReceived()。如果您尝试同时使用数据消息和通知消息,onMessageReceived()将不会触发你的应用程序在后台。

只需执行您想要执行的任何操作,例如保存到onMessageReceived()

中的数据库,sharedPeference等

那么你如何发送到活动?

使用广播接收器这里是您发送广播接收器的方式,您希望将其放入onMessageReceived()内,因此,只要您收到新通知,此代码就会帮助您将数据发送到特定活动。

Intent intent = new Intent("Use anything you like");
intent.putExtra("data","The data you receive");
sendBroadcast(intent);

在您的活动中,在onStart()

中注册
registerReceiver(broadCastReceiver,new IntentFilter("must match the intent filter parameter"));

以下是处理数据的方式

class broadCastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        Log.d("Your data",intent.getData());
    }
}

注意:您的意图过滤器参数必须与您在onMessageReceived()

中设置的意图参数相匹配

如果您的应用从未收到来自FCM的数据,那么这个答案将毫无用处,因为您的问题仍然不清楚这是我能为您做的最好的。