Получить значение из RemoteMessage из метода FCM onMessageReceived
У меня есть миграция gcm to fcm
для push-уведомления.
но как я получаю данные пакета из RemoteMessage, полученные методом onMesssageReceived.
Old GCM give bundle data onMessageReceiced method but in FCM there is RemoteMessage data.
Итак, скажите, пожалуйста, как я разбираю remotemessage, чтобы получить всю ценность уведомления.
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"
]
}
Ответы
Ответ 1
В FCM вы получили RemoteMessage вместо Bundle.
Ниже приведен метод, который я использовал в своем приложении, где data - это мой RemoteMessage
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();
Ниже приведены данные моего уведомления, которые я отправляю с сервера
{
"registration_ids": "",
"data": {
"questionId": 1,
"userDisplayName": "Test",
"questionTitle": "Test",
"latestComment": "Test"
}
}
Итак, вам нужно разобрать каждое поле в соответствии с вашим ответом.
Когда я отлаживаю код, вы получите карту в своем RemoteMessage и создадите эти поля в соответствующих типах данных, поскольку все эти данные поступают как строка.
Ответ 2
Вот фрагмент кода, который в значительной степени объясняет себя.
Вы получаете данные в виде Карты
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());
}
}
Убедитесь, что на сервере вы отправляете данные в правильном формате, то есть в ключе данных
вот демонстрационный Json файл
{
"to": "registration_ids",
"data": {
"key": "value",
"key": "value",
"key": "value",
"key": "value"
}
}
Ответ 3
Чтобы получить данные из уведомления, которое вы получили, когда приложение находится на переднем плане:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.d("onMessageReceived", "Message From " + remoteMessage.getFrom()); //sender ID
Log.d("onMessageReceived", "Notification Title " + remoteMessage.getNotification().getTitle()); //notification title
Log.d("onMessageReceived", "Notification Body " + remoteMessage.getNotification().getBody()); //notification body
}
@Override
public void onNewToken(String token) {
super.onNewToken(token);
Log.d("onNewToken", token);
}