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

S S*_*ngh 5 firebase firebase-cloud-messaging

根据 firebac 文档,我们可以按以下格式发送 FCM 数据消息:

{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMEFQ3P1...",
"data":{
  "Nick" : "Mario",
  "body" : "great match!",
  "Room" : "PortugalVSDenmark"
}
}
}
Run Code Online (Sandbox Code Playgroud)

但是,我需要将数据作为 JSON 数组发送,如下所示:

{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoIZvvDMExUdFQ3P1...",
"data":{
       "geofence":[{
                     "Nick" : "Mario",
                     "body" : "great match!",
                    "Room" : "PortugalVSDenmark"
                    },
                    {
                    "Nick" : "Mario",
                    "body" : "great match!",
                    "Room" : "PortugalVSDenmark"
                    }]
}
}
}
Run Code Online (Sandbox Code Playgroud)

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

无法向 Firebase 发送消息:

  {  "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."          }        ]      }    ]  
}} 
Run Code Online (Sandbox Code Playgroud)

Android 代码需要 JSON 数组格式而不是字符串格式的数据。我被困在这里很糟糕。

任何帮助将不胜感激。

Dou*_*son 7

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

您可以从RemoteMessage.getData()的 Android API 中看到返回类型是Map<String, String>,这意味着您只能有字符串值。您还可以在协议文档中看到数据有效负载是映射到字符串值的字符串键。因此,您将不得不想办法将数据展平为字符串。