Inicialización
XpressPlug se debe inicializar para que pueda ser invocado correctamente.
Para inicializar XpressPlug desde reactNative, debes invocar la clase XpressPlugInitializer. Esta clase Kotlin fue diseñada para invocar el inicializador del SDK y administrar las devoluciones de respuestas. Esta clase implementa la interfaz StartAction.Callback, que permite gestionar cada evento de inicialización, como el proceso de descarga de recursos, la gestión del progreso o de errores.
Importante
Para permitir que XpressPlug se integre correctamente en su ambiente de ejecución, el inicializador requiere parámetros contextuales, como referencias a la aplicación principal y la actividad actual.
Sigue los pasos a continuación para inicializar XpressPlug:
Invocar la clase XpressPlugInitializer:
class XpressPlugInitializer(private var promise: Promise?) : StartAction.Callback { fun execute() { XpressPlugConstants.init() XpressPlug.init( MainApplication.context, XpressPlugConstants.getConstants(), listOf() ) XpressPlug.start(MainApplication.mainActivity, this) } override fun onProgressMessageUpdate(message: String?) { Log.i("XpressPlugModule", "---- XpressPlugInitializer onProgressMessageUpdate: $message") } override fun onXpressPlugNeedsUpdate() { Log.i("XpressPlugModule", "---- XpressPlugInitializer onXpressPlugNeedsUpdate") } override fun onProgressPercentageUpdate(percentage: Int) { Log.i( "XpressPlugModule", "---- XpressPlugInitializer onProgressPercentageUpdate: $percentage" ) } override fun onFinish() { Log.i("XpressPlugModule", "---- XpressPlugInitializer onFinish") promise?.resolve("true") promise = null } override fun onError(code: Int, message: String?) { val error = listOf("$code", message).joinToString(" - ") Log.i("XpressPlugModule", "---- XpressPlugInitializer onError: $error") promise?.reject("$code", message) promise = null } }
Inicializa y ejecuta la clase XpressPlugInitializer desde XpressPlugModule:
class XpressPlugModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { private var initializer: XpressPlugInitializer? = null private var entryPoint: XpressPlugEntryPoint? = null override fun getName(): String { return "XpressPlugModule" } @ReactMethod fun initialize(promise: Promise) { Log.i("XpressPlugModule", "---- XpressPlugModule did receive call initialize") initializer = XpressPlugInitializer(promise) initializer?.execute() } }
Para obtener los parámetros de Actividad y Aplicación que requiere XpressPlug, se recomienda utilizar dos variables estáticas dentro de la clase MainApplication en tu proyecto Android, como se muestra a continuación: