(Новое) сообщение GCM, но как разобрать? - программирование
Подтвердить что ты не робот

(Новое) сообщение 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}]

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Затем в коде:

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

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

Ответ 3

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

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

Пакет [{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");

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

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