Сообщения данных FCM: необходимо отправить массив JSON вместо значения String - PullRequest
0 голосов
/ 19 декабря 2018

Согласно документу 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не в строкеЯ застрял здесь плохо.

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 19 декабря 2018

Значения в полезной нагрузке данных должны быть строками.Вы не можете иметь массивы или объекты.Ваша геозона - это массив.

В API Android для RemoteMessage.getData () видно, что тип возвращаемого значения Map<String, String>, что означает, что вы можете иметь только строковые значения.В документах протокола также видно, что полезная нагрузка данных - это строковые ключи, сопоставленные со строковыми значениями.Итак, вам нужно будет придумать, как сгладить ваши данные в строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...