Firebase сообщения со специальными символами - PullRequest
1 голос
/ 12 октября 2019

Я пытаюсь отправить сообщение, используя облачные сообщения Firebase со специальными символами, такими как символы русского языка. Здесь соответствующий код:

От отправителя приложения:

String message = tv.getText().toString(); //get text from UI text view
....
App myapp = new App.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(getString(R.string.app_name)).build();
try {
     //send the message to the server
     myapp.sendToGroup(new String(message.getBytes(StandardCharsets.UTF_8),
          StandardCharsets.UTF_8)).execute();
} catch (IOException e) {
     return;
}

С сервера:

    Map<String, JsonElement> dataMap = new HashMap<>();
    dataMap.put(MSG, new JsonPrimitive(message));
    pushMessage.setData(dataMap);

    HttpURLConnection conn = null;
    URL url = new URL("https://fcm.googleapis.com/fcm/send");
    conn = (HttpURLConnection) url.openConnection();
    conn.setDoOutput(true);
    conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
    conn.setRequestProperty("project_id", "xxxxxxx");
    conn.setRequestProperty("Authorization", "key=" + FCM_API_KEY);
    conn.setRequestProperty("Accept", "application/json");
    conn.setRequestMethod("POST");
    .......//send the request here

Служба получения приложения:

public class CloudListenerService extends FirebaseMessagingService {

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Map<String, String> data = remoteMessage.getData();
    String message = data.get(MSG);
    if (message == null)
        return;
    Bundle b = new Bundle();
    Intent r = getNewIntent();
    b.putString(Receiver.EXTRA_MESSAGE, new String(message.getBytes(StandardCharsets.UTF_8),
            StandardCharsets.UTF_8));
    sendBroadcast(r);
}
}

Я вижу сообщение ?????? это просто означает, что что-то не так с кодировкой. С сервера я вижу правильную строку, закодированную с помощью% 23clip% 23% D0% BF% D1% 80% D0% B8% D0% BC% D0% B5% D1% 80 (т.е. # clip # пример текста, который я отправил),Где ошибка?

1 Ответ

2 голосов
/ 20 октября 2019

Обнаружена проблема: я создавал писателя неправильно. Я изменил код с

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

на

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
...