package ai.sirrus.reactnativesdk import android.content.Context import android.util.Log import com.google.firebase.messaging.RemoteMessage object SirrusPushMessagingFallback { private const val LOG_TAG = "SirrusSDK" private const val MOENGAGE_FIREBASE_HELPER = "com.moengage.firebase.MoEFireBaseHelper" @JvmStatic fun forwardRemoteMessage(context: Context, remoteMessage: RemoteMessage): Boolean { return forwardToMoEngage(context.applicationContext, "passPushPayload", remoteMessage.data) } @JvmStatic fun forwardNewToken(context: Context, token: String): Boolean { return forwardToMoEngage(context.applicationContext, "passPushToken", token) } private fun forwardToMoEngage(context: Context, methodName: String, payload: Any): Boolean { val helperClass = try { Class.forName(MOENGAGE_FIREBASE_HELPER) } catch (_: ClassNotFoundException) { return false } return try { val helper = helperClass.getMethod("getInstance").invoke(null) val method = helperClass.methods.firstOrNull { method -> method.name == methodName && method.parameterTypes.size == 2 && Context::class.java.isAssignableFrom(method.parameterTypes[0]) && method.parameterTypes[1].isAssignableFrom(payload.javaClass) } ?: return false method.invoke(helper, context, payload) true } catch (error: Throwable) { Log.w(LOG_TAG, "Unable to forward non-Sirrus push to MoEngage.", error) false } } }