Я ищу решение для отправки уведомлений с сервера (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"}]}
Похоже, мое сообщение не отправляется.
Любой пример рабочего кода будет очень признателен.
Спасибо за помощь.
- Пранав