FCM создает ошибки в форматировании JSON - PullRequest
0 голосов
/ 09 мая 2018

Веб-служба отправляет мне следующее уведомление на Android через FCM:

{
  "registration_ids": [
    "123456"
  ],
  "priority": "high",
  "data": {
    "notification_type": "request_accepted",
    "feedback": "request accepted"
  }
}

Однако на Android, в onMessageReceived, это становится так:

{
    google.sent_time=1525800030866, 
    notification_type=request_accepted,
    google.ttl=2419200,
    feedback=request accepted,
    from=875234321904, 
    google.message_id=0:1525800030873951%137ecd
}

Выше, очевидно, недопустимый JSON. Почему это так и как это можно исправить?

В полезной нагрузке есть другие данные, которые корректно проходят через правильное форматирование JSON (: вместо =). Однако эти несколько параметров имеют неправильное форматирование.

РЕДАКТИРОВАТЬ: onMessageReceived:

public void onMessageReceived(RemoteMessage remoteMessage)
    {
        try
        {
            if(remoteMessage.getData() != null)
            {
                parseJson(remoteMessage.getData().toString());
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    private Object parseJson(String json)
    {
        Moshi moshi = new Moshi.Builder().build();
        JsonAdapter<ClientRequestAcceptedModel> responseAdapter = moshi.adapter(ClientRequestAcceptedModel.class);
        try
        {
            return responseAdapter.fromJson(json);
        }
        catch (IOException e)
        {
            e.printStackTrace();
            return null;
        }
    }

Больше объектов JSON

{
    "notification_type": "request_accepted",
    "partner_information": "{\"zip\":\"24000\"}",
    "feedback": "request accepted",
    "request_information": "{\"request_type\":\"custom\",\"status\":0}"
}

Информация о партнере и запросе не отображаются так, как должны быть.

1 Ответ

0 голосов
/ 09 мая 2018

ожидаемое поведение

когда вы вызовете remoteMessage.getData (), вы получите карту.

Map<String, String> params = remoteMessage.getData();

чтобы получить json, вам нужно добавить следующее

JSONObject jobject = new JSONObject(params);
Log.d("This is the json", jobject());

поэтому ваши коды должны быть примерно такими:

Map<String, String> params = remoteMessage.getData();

if(params != null)
{
    JSONObject jobject = new JSONObject(params);
    parseJson(jobject.toString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...