14

我正在使用“新”GCM,它是 Google Play 服务的一部分,它不使用 Android 和服务器的 jar。Android 使用 Google Play apk 注册、接收甚至发送消息。在服务器端,我们需要与 GCM 通信的只是向他们的服务器进行 POST(如果不使用 XMPP)。我已经准备好了:我的 Android 应用注册并等待来自 GCM 的消息。我的服务器可以与 GCM 通信,并且我可以将消息传递到我的 Android 应用程序。

问题:我正在使用一个带有 POJO 对象的通用 jar(Android 和服务器),我在 JSON 之间进行转换。由于从我的服务器到 GCM 的 POST 使用 JSON 并在我的 Android 使用中接收到消息(至少我相信是这样),我认为这会让我的生活更轻松。但是当在 Android 中接收来自 GCM 的消息时,我不知道如何获取消息的有效负载并转换为我的对象。我可以在那里看到信息,但它不是我的对象(有一些 GCM 推送到其中的信息)。

我的问题是:有没有办法在 Android 端以我发送到 GCM 服务器的方式获取有效负载信息?或者我应该在没有 JSON 的情况下解析 Android 中接收到的数据?

我发送的消息(“数据”是有效负载)

{"registration_ids":["APA91bFdV..."],"collapse_key":null,"delay_while_idle":false,"time_to_live":2419200,"data":{"type":10,"targetVersion":-1, “消息”:“测试消息”,“网址”:“测试网址”}}

我在 Android intent.getExtras().toString() 中得到了什么

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

我会很感激你的帮助。谢谢!

4

3 回答 3

25

有没有办法以我发送到 GCM 服务器的方式在 Android 端获取有效负载信息?

与其考虑“JSON”,不如考虑“键/值对”。您的服务器以键/值对的形式发送数据。您的应用程序在Intent. 您知道您的键是什么,因此只需从与这些键相关的附加项中检索值(例如getStringExtra("message"), getStringExtra("url"))。

或者我应该在没有 JSON 的情况下解析 Android 中接收到的数据?

接收到的数据不是 JSON 格式。

于 2013-07-20T22:24:29.887 回答
10

您必须向 json 数据添加另一个级别,显然它们不会递归解析 json。发送:

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

然后在代码中:

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

这可以很容易地转换为 POJO,对我来说,如果你已经有类,这种方法会更好(或者只是想使用对象而不是 get...(“xyz”)

于 2014-01-26T01:10:20.343 回答
1

这就是我为获取数据所做的......我认为这会对你有所帮助..

这是我从 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=News, 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-38dc71 ]

解决方案:

    Bundle bundle = message.getPushBundle();

在您的情况下,获取捆绑对象然后像这样使用...

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

你会得到数据..

快乐编码!

于 2015-05-05T10:09:31.747 回答