Reputation: 1104
I have migrate gcm to fcm
for push notification message.
but how I Get bundle data from RemoteMessage received onMesssageReceived method.
Old GCM give bundle data onMessageReceiced method but in FCM there is RemoteMessage data.
So please tell me how I parse remotemessage for get all value of notification.
MY PAYROL
{
"collapse_key":"score_update",
"priority":"high",
"content_available":true,
"time_to_live":108,
"delay_while_idle":true,
"data":
{
"message": "Message for new task",
"time": "6/27/2016 5:24:28 PM"
},
"notification": {
"sound": "simpleSound.wav",
"badge": "6",
"title": "Test app",
"icon": "myicon",
"body": "hello 6 app",
"notification_id" : "1140",
"notification_type" : 1,
"notification_message" : "TEST MESSAGE",
"notification_title" : "APP"
},
"registration_ids": ["cRz9SJ-gGuo:APA91bFJPX7_d07AR7zY6m9khQro81GmSX-7iXPUaHqqcOT0xNTVsOZ4M1aPtoVloLNq71-aWrMCpIDmX4NhMeDIc08txi6Vc1mht56MItuVDdA4VWrnN2iDwCE8k69-V8eUVeK5ISer"
]
}
Upvotes: 29
Views: 58137
Reputation: 1369
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
Upvotes: 2
Reputation: 21
RemoteMessage.Notification notification = remoteMessage.getNotification();
Map<String, String> data = remoteMessage.getData();
sendNotification(notification, data);
String urlparam=data.get("url_param").toString();
String urlparam=data.get("dp_name").toString();
"data": {
"notification_id": 11,
"title_url": "service_id=1;service_category=Installation;",
"destination": "Category_page"
}
Upvotes: 1
Reputation: 912
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.
Upvotes: 36
Reputation: 3669
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
Upvotes: 2
Reputation: 2035
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"
}
}
Upvotes: 46