Envoi d'une notification via Firebase

Bonjour,

Nous travaillons sur un envoi de notification sur une application hybride, par l’intermédiaire de Firebase.

Notre configuration semble correcte car nous avons un token d’authentification :

image

Pouvez-vous nous préciser quelles fonctions appeler pour envoyer une notification sur les devices, et à quel endroit les appeler (dans les hooks côté back ou dans les ressources côté front ?).

Merci pour votre réponse,

Cordialement,

Guillaume

Les tokens sont stockés dans les paramètres système de l’utilisateur FIREBASE_TOKENS.

L’objet externe SocialNotification permet d’envoyer des messages vers tous les utilisateurs / des utilisateurs nommés / ou des groupes de type Notification

Il utilise tous les tokens des utilisateurs ciblés.

Il faut bien paramétrer l’ensemble des paramètres d’envoi vers FIREBASE.

voir la doc Firebase dans Cordova :
https://docs.simplicite.io/documentation/99-misc/cordova.md

Pour envoyer des message par API, vous avez un helper, voir la javadoc
https://docs.simplicite.io/4.0/javadoc/com/simplicite/util/tools/GoogleFirebaseTool.html

GoogleFirebaseTool

	/**
	 * Send a message
	 * @param g        User rights
	 * @param title    optional message title
	 * @param body     required message
	 * @param icon     optional icon
	 * @param allUsers send to all users?
	 * @param logins   or specified logins?
	 * @param groups   or specified groups?
	 * @param object   optional business object
	 * @param rowId    optional object rowId
	 */
	public static void sendMessage(Grant g, String title, String body, String icon,
		boolean allUsers, List<String> logins, List<String> groups,
		String object, String rowId)
	throws Exception

Merci François, nous envoyons bien des notifications.

Ok, nous avons ajouté en P24 la possibilité de “joindre” un objet au message pour ouvrir le formulaire d’un objet sur ouverture de la notification foreground (applicaiton ouverte).

Et la méthode pour créer un message sera publique pour envoi de données spécifiques :

	public static Builder getNotifBuilder(String title, String body, boolean high, long ttl, String sound, String color, String icon, Map<String,String> map)
	{
		// Tilte + Body
		Builder b = Message.builder();
		b.setNotification(new Notification(title, body));

		// Android specifics
		// https://github.com/firebase/firebase-admin-java/blob/master/src/main/java/com/google/firebase/messaging/AndroidConfig.java
		b.setAndroidConfig(AndroidConfig.builder()
			.setPriority(high ? Priority.HIGH : Priority.NORMAL)
			.setTtl(ttl>0 ? ttl : TTL_DAY)
			// https://github.com/firebase/firebase-admin-java/blob/master/src/main/java/com/google/firebase/messaging/AndroidNotification.java
			.setNotification(AndroidNotification.builder()
				// ZZZ Icon name is fixed in cordova plugin (see source FirebasePluginMessagingService.java)
				.setIcon(icon!=null ? icon : "notification_icon")
				.setSound(sound!=null ? sound : "default")
				.setColor(color!=null ? color : "#FFFFFF")
				.build())
			.build());

		// Custom data
		if (!Tool.isEmpty(map))
			b.putAllData(map);

		return b;
	}

	public static String sendToUser(String login, String token, String title, String body, Map<String,String> map) throws Exception
	{
		if (!init()) return null;
		try
		{
			Message message = getNotifBuilder(title, body, false, 0, null, null, null, map)
				.setToken(token)
				.build();
			return FirebaseMessaging.getInstance(app).send(message);
		}
		catch (FirebaseMessagingException e)
		{
			// Unknown token => remove
			if (ERR_UNREGISTERED.equals(e.getErrorCode()))
			{
				removeToken(login, token);
				return null;
			}
			// Error denied, quota...
			AppLog.error(GoogleFirebaseTool.class, "sendToUser", "FirebaseMessagingException code="+e.getErrorCode()+" message="+e.getMessage()+" on token="+token, e, null);
			throw new Exception("Send error: "+e.getErrorCode() + " = " +e.getMessage());
		}
	}