[JAVA] Livraison push de l'application Spring vers Firebase Cloud Messaging

Firebase

Une solution de messagerie multiplateforme fournie par Google pour assurer la livraison des messages gratuitement.

Lors du Google I / O 2017 qui s'est tenu l'autre jour, il semble que les fonctions du système d'analyse aient été grandement améliorées en plus des fonctions de base.

Cette fois, il y avait des points addictifs lors de l'appel de cette Firebase Cloud Messaging (ci-après, FCM) du côté du serveur, donc je vais le résumer comme un mémorandum.

Différence entre les notifications FCM et Firebase

FCM

Un mécanisme qui permet une distribution push flexible vers un large éventail de cibles telles que les terminaux mobiles et les navigateurs Web. Fondamentalement, il est nécessaire de mettre en œuvre le processus de transmission dans chaque langue.

Firebase Notifications

Un mécanisme qui vous permet d'envoyer des notifications push à partir du tableau de bord Firebase. C'est facile car il n'est pas nécessaire de l'implémenter, mais seules de simples notifications push peuvent être effectuées.

Cette fois, je résumerai brièvement le premier.

Informations requises

Informations de réponse

Lorsque la communication HTTP est effectuée au format ci-dessus, les informations de réponse suivantes seront renvoyées. Officiel: FCM Response

Exemple de réponse FCM


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

Alors, faites un modèle pour recevoir ce qui précède.

FirebaseResponse.java


public class FirebaseResponse 
{
	public Long multicast_id;
	public Integer success;
	public Integer failure;
	public Integer canonical_ids;
	public List<Result> results;

	class Result 
	{
		private String message_id;
		private String registration_id;
		private String error;
	}
	//L'accesseur est omis car lombok est utilisé
}

la mise en oeuvre

FirebaseClient.java



public class 
{
	private final String SAMPLE_MESSAGE= "{\"to\": \"xxx\",\"notification\": {\"title\": \"C'est un titre\",\"body\": \"C'est le texte\"},\"data\": {\"greet\": \"Hello. World!!\"}}";
	private final String FCM_END_POINT = "https://fcm.googleapis.com/fcm/send";
	private final String SERVER_KEY = "Clé du serveur";

	RestTemplate template = new RestTemplate();

	HttpHeaders headers = new HttpHeaders();
	Charset utf8 = Charset.forName("UTF-8");
	MediaType mediaType = new MediaType(MediaType.APPLICATION_JSON, utf8);
	headers.setContentType(mediaType);
	headers.set( "Authorization", String.format("key=%s", SERVER_KEY) );

	HttpEntity< String > entity = new HttpEntity< String >( SAMPLE_MESSAGE, httpHeaders );

	FirebaseResponse response = template.postForObject(FCM_END_POINT , entity, FirebaseResponse.class );
	LOGGER.info(String.format("Firebase Push Result. header:[%s], message:[%s], response:[%s]", httpHeaders, SAMPLE_MESSAGE, response ));

}

Le traitement des requêtes et l'acquisition des réponses sont possibles de cette manière.

Notifications déformées reçues sur le terminal

J'étais accro à la partie où la partie japonaise de la notification push arrivée au terminal était déformée comme "?????????".

c'est


Charset utf8 = Charset.forName("UTF-8");
MediaType mediaType = new MediaType(MediaType.APPLICATION_JSON, utf8);
headers.setContentType(mediaType);

C'était parce que je n'ai pas fait ce qui précède. (Il est également écrit fermement en Officiel. Orz)

Tâche

Dans le cas des notifications Firebase, la notification envoyée depuis le tableau de bord reste sous forme de journal, de sorte que l'analyse des données peut facilement saisir l'état d'envoi, mais dans le cas de FCM, seul le résultat d'envoi est renvoyé, de sorte que la gestion de l'historique des notifications d'envoi, etc. est unique. Il doit être pris en compte dès son développement en.

Cela dit, il n'a pas beaucoup d'informations, donc je pense que c'est un petit fardeau.

À la fin

C'est un service dans lequel Google consacre beaucoup d'efforts, alors j'ai pensé que c'était une technologie qui pourrait devenir une arme pour vivre dans la future société informatique en la portant.

Cependant, comme la connaissance du développement d'applications smartphone est essentielle pour la recevoir sur le terminal, je pense que je devrais la porter à partir de la notification push du navigateur pour le moment. .. ..

À ce moment-là, je vais le résumer à nouveau sous forme d'article.

Eh bien.

Recommended Posts

Livraison push de l'application Spring vers Firebase Cloud Messaging
Faire des notifications PUSH avec des images avec Firebase Cloud Messaging
Essayez Spring Boot de 0 à 100.
Réécriture de l'applet à l'application
Mise à niveau de la botte à ressort de la série 1.5 à la série 2.0
L'histoire de la transition de Spring Boot 1.5 à 2.1
Modifications lors de la migration de Spring Boot 1.5 vers Spring Boot 2.0
Transition de Struts2 à Spring MVC (contrôleur)
Modifications lors de la migration de Spring Boot 2.0 vers Spring Boot 2.2
De la création d'un projet Spring Boot à l'exécution d'une application avec VS Code
[Inverser] Spring Security (mis à jour de temps en temps)
Connectez-vous à Aurora (MySQL) depuis une application Java
Appuyez sur tous les "Guides" de Spring (mis à jour de temps en temps)
De la création d'un environnement cloud AWS au déploiement d'une application Spring Boot (pour les débutants)