Как отправить уведомление в Google Firebase FCM с помощью весенней загрузки? - PullRequest
0 голосов
/ 11 июля 2019

Я ищу решение для отправки уведомлений с сервера (Spring Hibernate RESTful API) в клиентское приложение, написанное на Angular и Android. Я хочу реализовать решение, которое не потребляет слишком много пропускной способности пользователя, поскольку моя база пользователей будет иметь ограниченные возможности подключения (низкая пропускная способность и мобильная сеть 3G / 2G). Это исключает опрос как возможное решение. Затем я исследовал сокетные соединения, но похоже, что сокетные соединения можно оставить открытыми и вызвать проблемы с утечкой памяти. Далее я пробую Google FCM, но застрял в реализации. В частности, я пытаюсь отправить уведомление на FCM, но не получаю его на стороне клиента. Напомним, что я должен отправить уведомление из слоя JAVA (Spring boot) и получить его как на угловой, так и на Android. Я попробовал некоторый пример кода, чтобы сделать эту работу с помощью FCM. Но это не работает. Пожалуйста, предложите мне решение или другие способы сделать эту работу на работе. Вот код, с которым я работаю:

    JSONObject body = new JSONObject();
            body.put("to", "/users/" + TOPIC);
            body.put("priority", "high");

            JSONObject notification = new JSONObject();
            notification.put("title", "JSA Notification");
            notification.put("body", "Happy Message!");

            JSONObject data = new JSONObject();
            data.put("Key-1", "JSA Data 1");
            data.put("Key-2", "JSA Data 2");

            body.put("notification", notification);
            body.put("data", data);

            HttpEntity<String> entity = new HttpEntity<>(body.toString());
            RestTemplate restTemplate = new RestTemplate();
            ArrayList<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
            interceptors.add(new HeaderRequestInterceptor("Authorization", "key=" + FIREBASE_SERVER_KEY));
            interceptors.add(new HeaderRequestInterceptor("Content-Type", "application/json"));
            restTemplate.setInterceptors(interceptors);
            String firebaseResponse = restTemplate.postForObject(FIREBASE_API_URL, entity, String.class);
            CompletableFuture<String> pushNotification = CompletableFuture.completedFuture(firebaseResponse);
            CompletableFuture.allOf(pushNotification).join();
        try {
            String firebaseResponse = pushNotification.get();
            System.out.println("reponse "+firebaseResponse);
            return new ResponseEntity<>(firebaseResponse, HttpStatus.OK);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

Из firebaseResponse я получаю ответ ниже в своем браузере:

{"multicast_id":6197426474050349577,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}

Похоже, мое сообщение не отправляется. Любой пример рабочего кода будет очень признателен. Спасибо за помощь. - Пранав

1 Ответ

0 голосов
/ 19 июля 2019

FIREBASE_SERVER_KEY неверно.Если FIREBASE_SERVER_KEY правильный, ответ должен быть ниже.

{"multicast_id":7163645588662808791,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1563534037236589%eec6c0c0eec6c0c0"}]}
...