(新)收到GCM消息,但如何解析?

时间:2013-07-20 22:18:11

标签: android google-cloud-messaging

我正在使用“新”GCM(Google Play服务的一部分),它不会为Android和服务器使用jar。 Android使用Google Play apk注册,接收甚至发送消息。在服务器端,我们需要与GCM通信的是对他们的服务器进行POST(如果不使用XMPP)。我已全部设置:我的Android应用程序注册并等待来自GCM的消息。我的服务器可以与GCM通信,我可以将消息发送到我的Android应用程序。

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

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

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

  

{ “registration_ids”:[ “APA91bFdV ...”], “collapse_key的”:NULL, “delay_while_idle”:假 “time_to_live”:2419200, “数据”:{ “类型”:10 “targetVersion”: -1,“message”:“test msg”,“url”:“test url”}}

我在Android的注意事项.getExtras()。toString()

  

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

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

2 个答案:

答案 0 :(得分:25)

  

有没有办法在Android端获取有效负载信息,就像我发送给GCM服务器一样?

不要考虑“JSON”,而应该考虑“键/值对”。您的服务器以键/值对的形式发送数据。您的应用会在Intent的附加内容中将这些数据作为键/值对接收。您知道密钥是什么,因此只需从与这些密钥绑定的附加内容中检索值(例如getStringExtra("message")getStringExtra("url"))。

  

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

收到的数据不是JSON。

答案 1 :(得分:10)

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

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

然后在代码中:

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

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

,这种方法会更好