(Новое) сообщение GCM, но как разобрать?

Я работаю с «новым» GCM, частью Служб Google Play, который не использует банки для Android и сервера. Android использует Google Play apk для регистрации, получения и даже отправки сообщений. На стороне сервера все, что нам нужно для связи с GCM, – это сделать POST на их сервер (если не использовать XMPP). У меня все установлено: мое приложение Android регистрируется и ждет сообщений, поступающих из GCM. Мой сервер может общаться с GCM, и я могу доставлять сообщения в свое приложение для Android.

Проблема: я использую общую банку (Android и сервер) с объектами POJO, которые я преобразовываю в JSON и из него. Поскольку POST для GCM с моего сервера использует JSON, и полученные сообщения в моем Android тоже используют (по крайней мере, я полагаю, что это так), я думал, что это облегчит мне жизнь. Но при получении сообщения от GCM в Android я не знаю, как получить полезную нагрузку сообщения и преобразовать его в мои объекты. Я вижу информацию там, но это не мой объект (есть какая-то информация, которую GCM нажимает на нее).

Мой вопрос: есть ли способ получить в конце Android полезную информацию, как я отправил на сервер GCM? Или я должен анализировать полученные данные на Android без JSON?

Сообщение, которое я отправил («данные» – это полезная нагрузка)

{ "registration_ids": [ "APA91bFdV …"], "collapse_key": нулевой, "delay_while_idle" ложь "time_to_live": 2419200, "данные": { "тип": 10, "targetVersion": – 1, "Message": "test msg", "url": "test url"}}

Что я получил в Android intent.getExtras (). ToString ()

Bundle [{message = test msg, collapse_key = do_not_collapse, targetVersion = -1, from = 483833987130, type = 10, url = test url}]

Буду признателен за вашу помощь. Благодаря!

Solutions Collecting From Web of "(Новое) сообщение GCM, но как разобрать?"

Есть ли способ получить в конце Android полезную информацию, как я отправил на сервер GCM?

Вместо того, чтобы думать «JSON», подумайте «пары ключ / значение». Ваш сервер отправляет данные в пары ключ / значение. Ваше приложение получает эти данные в виде пар ключ / значение в дополнительных функциях в Intent . Вы знаете, каковы ваши ключи, поэтому просто извлекайте значения из дополнительных компонентов, привязанных к этим ключам (например, getStringExtra("message") , getStringExtra("url") ).

Или я должен анализировать полученные данные на Android без JSON?

Полученные данные не находятся в JSON.

Вы должны добавить еще один уровень в данные json, по-видимому, они не анализируют json рекурсивно. Послать:

 {...., "data":{"payload":{"id":5,"a":5}}} 

Затем в коде:

 String json = intent.getExtras().getString("payload"); // json = {"id":5,"a":5} 

Это может быть легко преобразовано в POJO. Для меня этот подход лучше, если у вас уже есть классы (или просто хотите работать с объектами вместо get … («xyz»)

Это то, что я сделал, чтобы получить данные … Я думаю, это поможет вам ..

Это ответ, который я получаю от push-уведомления UrbanAirship.

Bundle [{com.urbanairship.push.ALERT =, content-available = 1, newscategorycode = O21R97, priority = 5, com.urbanairship.push.PUSH_ID = afc9e690-f308-11e4-af8c-001018957618, id = 6534.0, from = 966150816212, func = Новости, newscategory = HR, com.urbanairship.push.APID = 28e48c60-324b-456c-95b5-8fde9ab1a956, collapse_key = do_not_collapse, com.urbanairship.push.CANONICAL_PUSH_ID = 7641453d-9207-4213-81c0-404387583de7} ]

Решение:

  Bundle bundle = message.getPushBundle(); 

В вашем случае получите объект bundle, затем используйте вот так …

  String func = bundle.getString("func"); String newscategory = bundle.getString("newscategory"); String sinceId = bundle.getString("id"); 

Вы получите данные.

Счастливое кодирование!