根据firebace文档,我们可以采用以下格式发送FCM数据消息:
{
"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数组以发送消息,则会遇到以下错误:
无法将消息发送到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." } ] } ]
}}
Android代码期望使用JSON Array格式的数据,而不是String。我被严重卡在这里。
我们将不胜感激任何帮助。
答案 0 :(得分:1)
数据有效载荷中的值必须是字符串。您不能有数组或对象。您的地理围栏是一个数组。
从RemoteMessage.getData()的Android API中可以看到,返回类型为Map<String, String>
,这意味着您只能使用字符串值。您还可以在protocol docs中看到,数据有效载荷是映射到字符串值的字符串键。因此,您将必须找出一种将数据展平为字符串的方法。