代码之家  ›  专栏  ›  技术社区  ›  S Singh

FCM数据消息:需要发送JSON数组代替字符串值

  •  0
  • S Singh  · 技术社区  · 6 年前

    {
    "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMEFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
    }
    }
    

    但是,我需要以JSON数组的形式发送数据,如下所示:

    {
    "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoIZvvDMExUdFQ3P1...",
    "data":{
           "geofence":[{
                         "Nick" : "Mario",
                         "body" : "great match!",
                        "Room" : "PortugalVSDenmark"
                        },
                        {
                        "Nick" : "Mario",
                        "body" : "great match!",
                        "Room" : "PortugalVSDenmark"
                        }]
    }
    }
    }
    

    如果我尝试在请求正文中发送JSON数组以发送消息,则会出现以下错误:

      {  "error": 
       {    "code": 400,    
    "message": "Invalid value at 'message.data[0].value' (Map), Cannot have repeated items ('geofence') within a map.\nInvalid JSON payload received. Unknown name \"\" at 'message.data[0].value': Proto fields must have a name.",    
    "status": "INVALID_ARGUMENT",    
    "details": [      {        "@type": "type.googleapis.com/google.rpc.BadRequest",        "fieldViolations": [          {            "field": "message.data[0].value",            "description": "Invalid value at 'message.data[0].value' (Map), Cannot have repeated items ('geofence') within a map."          },          {            "field": "message.data[0].value",            "description": "Invalid JSON payload received. Unknown name \"\" at 'message.data[0].value': Proto fields must have a name."          }        ]      }    ]  
    }} 
    

    Android代码需要JSON数组格式的数据,而不是字符串格式的数据。我在这里受了重伤。

    我们将非常感谢您的帮助。

    1 回复  |  直到 6 年前
        1
  •  7
  •   Doug Stevenson    6 年前

    数据有效负载中的值必须是字符串。不能有数组或对象。你的地理围栏是一个阵列。

    RemoteMessage.getData() 返回类型为 Map<String, String> ,这意味着您只能有字符串值。你也可以在 protocol docs 数据有效负载是映射到字符串值的字符串键。因此,您必须找到一种将数据平坦化为字符串的方法。

        2
  •  0
  •   Adrian Mole Chris    3 年前

    如果您使用的是JavaScript,那么可以使用 JSON.stringify(object) 最后,你可以使用 JSON.parse(stringObject)