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.