Попытка отправить уведомление от пользователя к пользователю FCM - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь отправить уведомление пользователю, но я не уверен, что использую правильный подход, так как от запуска этого кода нет новых уведомлений в консоли firebases. Я могу передать маркер места назначения, заголовка и тела, однако я не уверен, что запрос на публикацию правильный. Любой совет будет большим спасибо.

public class ClientNotifications extends AsyncTask<String, Void, String> {


    String token;
    String titles;
    String body;
    public ClientNotifications(String token,String title,String body)
    {
        this.token = token;
        this.titles=title;
        this.body=body;
    }

    @Override
    protected String doInBackground(String[] params) {

        JsonObject jsonObj = new JsonObject();
        // client registration key is sent as token in the message to FCM server
        jsonObj.addProperty("token", token);

        JsonObject notification = new JsonObject();
        notification.addProperty("body", body);
        notification.addProperty("title", titles);
        jsonObj.add("notification", notification);

        JsonObject message = new JsonObject();
        message.add("message", jsonObj);

        final MediaType mediaType = MediaType.parse("application/json");

        OkHttpClient httpClient = new OkHttpClient();
        try {
            Request request = new Request.Builder().url("https://fcm.googleapis.com/v1/projects/yourfirebaseproject/messages:send")
                    .addHeader("Content-Type", "application/json; UTF-8")
                    .addHeader("Authorization", "Bearer " + "key")
                    .post(RequestBody.create(mediaType, message.toString())).build();

            Response response = httpClient.newCall(request).execute();
            if (response.isSuccessful()) {

            }

        } catch (IOException e) {
            Log.e("HI",e.toString());
        }

        return message.toString();

    }

    @Override
    protected void onPostExecute(String message) {

    }
}

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Это не сработает:

.addHeader("Authorization", "Bearer " + "key")

Вам нужно будет передать здесь фактический ключ сервера, а не только строку «ключ».

Стоит отметить, что вы не должны предоставлять этот ключ вашему клиентскому приложению, так как это дыра в безопасности. Конечный пользователь никогда не должен иметь возможность получить ключи сервера, которые предоставляют привилегированный доступ к API. Ваше клиентское приложение должно вместо этого вызывать безопасный бэкэнд для выполнения работы по отправке сообщения.

Также я укажу, что вы на самом деле не проверяете ошибки в запросе. Результат вызова FCM должен рассказать вам более подробно, что вы сделали неправильно (но передача строки «ключ» определенно не верна).

0 голосов
/ 22 марта 2020
JsonObject jsonObj = new JsonObject();
    jsonObj.addProperty("to", token);
    jsonObj.addProperty("content-available", true);
    jsonObj.addProperty("priority", "high");

    JsonObject notification = new JsonObject();
    notification.addProperty("body", body);
    notification.addProperty("title", titles);
    jsonObj.add("notification", notification);

    final MediaType mediaType = MediaType.parse("application/json");

    OkHttpClient httpClient = new OkHttpClient();
    try {
        Request request = new Request.Builder().url("https://fcm.googleapis.com/fcm/send")
                .addHeader("Content-Type", "application/json; UTF-8")
                .addHeader("Authorization", "key=your_key")
                .post(RequestBody.create(mediaType, jsonObj.toString())).build();

        Response response = httpClient.newCall(request).execute();
        if (response.isSuccessful()) {

        }

    } catch (IOException e) {
        Log.e("HI",e.toString());
    }

Я исправил то, что вижу. Удачи

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