使用Android GCM,您可以使用深度JSON"数据"字段吗?

Rob*_*ing 11 android google-cloud-messaging

也就是说,你能发送吗?

{
  "registration_ids": ["whatever", ...],
  "data": {
    "foo": {
      "bar": {
        "baz": [42]
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

或者是GCM请求的"数据"成员是否仅限于一个级别的键值对?我问b/c谷歌的文档[1]中的措辞暗示了限制,其中"数据"是:

一个JSON对象,其字段表示消息的有效负载数据的键值对.如果存在,有效载荷数据将作为应用程序数据包含在Intent中,其中键是额外的名称.例如,"data":{"score":"3x1"}会产生一个额外的意图得分,其值为字符串3x1对键/值对的数量没有限制,尽管有一个限制邮件的总大小.可选的.

[1] http://developer.android.com/guide/google/gcm/gcm.html#request

azg*_*fer 7

我自己做了一个测试并证实了我的想法.

使用此有效负载向自己发送GCM:

{
  "registration_ids": ["whatever", ...],
  "data": {
     "message": {
        "bar": {
           "baz": [42]
        }
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

我的客户收到了它并解析了"消息"意图,因为:

handleMessage - message={        "bar": {          "baz": [42]        }      }  
Run Code Online (Sandbox Code Playgroud)

因此,您确实可以对数据键的值进行进一步的JSON解析.

  • @gladiator - json对象本质上是无序的.永远不要依赖JSON对象中的排序,即使它看起来像是被维护的. (3认同)