Get value from RemoteMessage from FCM onMessageReceived method

The type of fun getData() is Map<String, String>. So you can fetch data object values like we usually fetch with Map<String, String>.

"data": {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3",
    "key4": "value4"
  }

then you have to fetch like this in kotlin

val data = remoteMessage.data
val key1 = data[key1]
val key2  = data[key2]// you can fetch like this

For getNotification() type is Notification object

val notification: Notification =  remoteMessage.notification
val message = notification.body
val title = notification.title // you can fetch by accessing Notification class member

Here are the details about the Notification object


Here is the code snippet which is pretty much self Explanatory.

You get the data in the form of the Map

public void onMessageReceived(RemoteMessage remoteMessage)
        {
            Log.e("dataChat",remoteMessage.getData().toString());
            try
            {
                Map<String, String> params = remoteMessage.getData();
                JSONObject object = new JSONObject(params);
                Log.e("JSON_OBJECT", object.toString());
          }
       }

Make Sure from server you are sending data in correct format i.e. in the "data" key

here is the demo Json file

{
  "to": "registration_ids",
  "data": {
    "key": "value",
    "key": "value",
    "key": "value",
    "key": "value"
  }
}

For your data that looks like:

"data":{ 
    "message": "Message for new task",
    "time": "6/27/2016 5:24:28 PM"
}

you should get them through

Log.d(TAG, "Key Data : " +  remoteMessage.getData().get("message").toString());
Log.d(TAG, "Key Data : " +  remoteMessage.getData().get("time").toString());

Wrap them in try catch to be sure


In FCM you received RemoteMessage instead of Bundle.

Below is the way I used in my application where data is my RemoteMessage

Map<String, String> data = remoteMessage.getData()
int questionId = Integer.parseInt(data.get("questionId").toString());
String questionTitle = data.get("questionTitle").toString();
String userDisplayName = data.get("userDisplayName").toString();
String commentText = data.get("latestComment").toString();

Below is my notification data which I am sending it from server

{
  "registration_ids": "",
  "data": {
    "questionId": 1,
    "userDisplayName": "Test",
    "questionTitle": "Test",
    "latestComment": "Test"
  }
}

So you have to parse each and every field as per your response. As I have debugged the code you will receive map in your RemoteMessage and cast those fields in appropriate data types as all those data comes as string.