package com.jdroid.android.firebase.fcm; import com.google.firebase.messaging.RemoteMessage; import com.jdroid.android.application.AbstractApplication; import com.jdroid.java.utils.LoggerUtils; import org.slf4j.Logger; public class FcmListenerResolver { private static final Logger LOGGER = LoggerUtils.getLogger(FcmListenerResolver.class); /** * Called when message is received. */ public void onMessageReceived(RemoteMessage remoteMessage) { if (LoggerUtils.isEnabled()) { StringBuilder builder = new StringBuilder(); builder.append("Message received. "); builder.append("from: "); builder.append(remoteMessage.getFrom()); if (remoteMessage.getMessageType() != null ) { builder.append(", "); builder.append("message type: "); builder.append(remoteMessage.getMessageType()); } if (remoteMessage.getData() != null & !remoteMessage.getData().isEmpty()) { builder.append(", "); builder.append("data: "); builder.append(remoteMessage.getData()); } LOGGER.info(builder.toString()); } FcmMessageResolver fcmResolver = AbstractFcmAppModule.get().getFcmMessageResolver(remoteMessage.getFrom()); if (fcmResolver != null) { FcmMessage fcmMessage = null; try { fcmMessage = fcmResolver.resolve(remoteMessage); } catch (Exception e) { AbstractApplication.get().getExceptionHandler().logHandledException("Error when resolving FCM message", e); return; } if (fcmMessage != null) { try { fcmMessage.handle(remoteMessage); } catch (Exception e) { AbstractApplication.get().getExceptionHandler().logHandledException("Error when handling FCM message", e); } } else { LOGGER.warn("The FCM message was not resolved"); } } else { LOGGER.warn("A FCM message was received, but not resolved is configured"); } } public void onMessageSent(String msgId) { LOGGER.info("Message sent with id: " + msgId); } public void onSendError(String msgId, Exception exception) { AbstractApplication.get().getExceptionHandler().logWarningException("Send error. Message id: " + msgId, exception); } public void onDeletedMessages() { LOGGER.info("Deleted messages"); } }