java spring-mvc firebase spring-boot firebase-cloud-messaging

java - Firebase cloud messaging resto API spring



spring-mvc spring-boot (2)

Tengo que hacer una API Rest en Spring Java para un arco de múltiples niveles en el que DAO, Controller, Service manager necesita ser construido para Firebase Cloud Messaging (FCM) para enviar mensajes de notificaciones push a la aplicación de Android, pero no puedo configurar un servidor en Java para enviar notificaciones a los dispositivos. ¿Cómo podría?


@Autowire el FCM en su clase @Component después de configurar su cuenta FCM. tutorial


Aquí está la forma en que puede lograr esto:

Paso 1 : Cree un proyecto en firebase y genere la clave del servidor.

Paso 2 : generar un objeto json para el servidor fcm. Aquí el mensaje puede contener un objeto de datos y un objeto de notificación. También debe tener id del receptor fcm. La muestra json es como:

{ "notification": { "notificationType":"Test", "title":"Title ", "body":"Here is body" }, "data": {"notificationType":"Test", "title":"Title ", "body":"Here is body" }, "to":"dlDQC5OPTbo:APA91bH8A6VuJ1Wl4TCOD1mKT0kcBr2bDZ-X8qdhpBfQNcXZWlFJuBMrQiKL3MGjdY6RbMNCw0NV1UmbU8eooe975vvRmqrvqJvliU54bsiT3pdvGIHypssf7r-4INt17db4KIqW0pbAkhSaIgl1eYjmzIOQxv2NwwwwXg" }

Paso 3 : escriba un servicio de llamadas Rest que se comunicará con el servidor fcm siguiendo la url:

https://fcm.googleapis.com/fcm/send

Aquí está el código de trabajo de muestra:

public class PushNotificationServiceImpl { private final String FIREBASE_API_URL = "https://fcm.googleapis.com/fcm/send"; private final String FIREBASE_SERVER_KEY = "YOUR_SERVER_KEY"; public void sendPushNotification(List<String> keys, String messageTitle, String message) { JSONObject msg = new JSONObject(); msg.put("title", messageTitle); msg.put("body", message); msg.put("notificationType", "Test"); keys.forEach(key -> { System.out.println("/nCalling fcm Server >>>>>>>"); String response = callToFcmServer(msg, key); System.out.println("Got response from fcm Server : " + response + "/n/n"); }); } private String callToFcmServer(JSONObject message, String receiverFcmKey) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.set("Authorization", "key=" + FIREBASE_SERVER_KEY); httpHeaders.set("Content-Type", "application/json"); JSONObject json = new JSONObject(); json.put("data", message); json.put("notification", message); json.put("to", receiverFcmKey); System.out.println("Sending :" + json.toString()); HttpEntity<String> httpEntity = new HttpEntity<>(json.toString(), httpHeaders); return restTemplate.postForObject(FIREBASE_API_URL, httpEntity, String.class); } }

Solo tiene que llamar a sendPushNotification(List<String> receiverKeys, String messageTitle, String message) luego el receptor recibirá un mensaje push

Gracias :)