SDK de Android
Instale el SDK de Android de DEUNA e integre los flujos de carrito, widget, wallet, voucher y siguiente acción.
En esta página
- Instalación
- Inicialización
- Abra el Widget de Pago en un modal
- Experiencias disponibles
- Integrar un widget
- Almacén de pagos y Pago con un clic
- Google Pay nativo
- Continúe con una acción pendiente
- Abrir un cupón
- Datos de fraude del dispositivo
- Referencia del ciclo de vida y llamadas de retorno
- Ejemplos y código fuente oficiales
Utilice el SDK de Android de DEUNA para mostrar experiencias completas de Checkout, Widget de Pago, Almacen de Pagos, Click to Pay, siguiente acción, voucher y Google Pay nativo en aplicaciones Kotlin. El SDK es compatible con Android API 22 y versiones posteriores.
Instalación#
Añada JitPack a la resolución de dependencias y especifique una versión del SDK.
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven(url = "https://jitpack.io")
}
}android {
defaultConfig {
minSdk = 22
}
}
dependencies {
implementation("com.github.deuna-developers:deunasdk:<version>")
}Seleccione y especifique <version> de las versiones del repositorio.Pruebe las actualizaciones en el entorno de prueba antes de implementarlas en producción.
Inicialización#
Cree una instancia del SDK con la clave API pública para el entorno seleccionado y guárdela para el flujo correspondiente.
import com.deuna.maven.DeunaSDK
import com.deuna.maven.shared.Environment
val deunaSDK = DeunaSDK(
environment = Environment.SANDBOX,
publicApiKey = "YOUR_PUBLIC_API_KEY",
)Para una instancia a nivel de aplicación, inicialice el SDK compartido una vez:
DeunaSDK.initialize(
environment = Environment.SANDBOX,
publicApiKey = "YOUR_PUBLIC_API_KEY",
)
val deunaSDK = DeunaSDK.sharedAbra el Widget de Pago en un modal#
Crear llamadas de retorno con tipos y pasar un Activity o cualquier otra interfaz de usuario válida. Context:
import com.deuna.maven.initPaymentWidget
import com.deuna.maven.widgets.payment_widget.PaymentWidgetCallbacks
val callbacks = PaymentWidgetCallbacks().apply {
onSuccess = { order ->
deunaSDK.close()
showConfirmation(order)
}
onError = { error -> showRetry(error) }
onClosed = { action -> showCart(action) }
onPaymentProcessing = { disablePayButton() }
onEventDispatch = { event, payload ->
analytics.track(event.name, payload)
}
}
deunaSDK.initPaymentWidget(
context = this,
orderToken = orderToken,
callbacks = callbacks,
language = "en",
)El host modal gestiona las vistas del widget y la redirección. Llamar a close() Cuando el flujo de éxito o error se ha completado, espera a que la URL externa activa se cierre antes de liberar el widget.
Experiencias disponibles#
| Experiencia | Método | Información necesaria |
|---|---|---|
| Finalizar compra | initCheckout(...) | context, orderToken, CheckoutCallbacks |
| Widget de Pago | initPaymentWidget(...) | context, orderToken, PaymentWidgetCallbacks |
| Caja de Pago | initElements(...) | context, ElementsCallbacks; types puede omitirse |
| Haga clic para pagar | initElements(...) | types = listOf(mapOf("name" to "click_to_pay")) |
| Siguiente Acción | initNextAction(...) | Token para el pedido que requiere una acción adicional |
| vale | initVoucherWidget(...) | Token para el pedido de vale |
Todos los métodos modales aceptan entradas opcionales de idioma, fraude, agente de usuario personalizado y dominio, siempre que sea compatible. No se deben modificar domain a menos que DEUNA le proporcione un host de integración específico.
Integrar un widget#
El modo integrado utiliza una configuración de tipo y DeunaWidget. Este ejemplo de Jetpack Compose renderiza el Widget de Pago y destruye su WebView con el ciclo de vida de la pantalla.
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.viewinterop.AndroidView
import com.deuna.maven.web_views.deuna.DeunaWidget
import com.deuna.maven.web_views.deuna.extensions.build
import com.deuna.maven.widgets.configuration.PaymentWidgetConfiguration
val configuration = remember(orderToken) {
PaymentWidgetConfiguration(
sdkInstance = deunaSDK,
orderToken = orderToken,
callbacks = callbacks,
)
}
val widget = remember { mutableStateOf<DeunaWidget?>(null) }
AndroidView(
factory = { context ->
DeunaWidget(context).apply {
widgetConfiguration = configuration
build()
widget.value = this
}
},
)
DisposableEffect(Unit) {
onDispose { widget.value?.destroy() }
}llamar resume() y pause() cuando el ciclo de vida que lo contiene comienza y termina. Para un widget dentro de una pantalla que se desplaza verticalmente, pase AutoResizeConfig en la configuración y conéctelo setOnScrollByCallback al estado de desplazamiento del padre.
Si su aplicación posee el botón de pago, configure hidePayButton = true en la configuración y llamar al módulo integrado DeunaWidget extensión submit { result -> ... } Desde el toque del botón.
Almacén de pagos y Pago con un clic#
El Almacén de pagos es la experiencia predeterminada de Elements. Proporcione una autenticación userToken o la información necesaria UserInfo para identificar al cliente.
import com.deuna.maven.initElements
import com.deuna.maven.shared.ElementsCallbacks
import com.deuna.maven.shared.domain.UserInfo
val elementsCallbacks = ElementsCallbacks().apply {
onSuccess = { credential -> useSavedCredential(credential) }
onError = { error -> showRetry(error) }
onClosed = { action -> showPaymentMethods(action) }
}
deunaSDK.initElements(
context = this,
orderToken = orderToken,
userInfo = UserInfo(email = "ada@example.com"),
types = listOf(mapOf("name" to "vault")),
callbacks = elementsCallbacks,
)Uso "click_to_pay" en lugar de "vault" para Click to Pay.
Google Pay nativo#
Verifique tanto la configuración del comerciante como el soporte del dispositivo antes de mostrar su botón de Google Pay. El resultado se almacena en caché por el SDK.
import com.deuna.maven.wallets.GetWalletsAvailableParams
import com.deuna.maven.wallets.WalletProvider
import com.deuna.maven.wallets.getWalletsAvailable
val userInfo = UserInfo(email = "ada@example.com")
deunaSDK.getWalletsAvailable(
context = this,
params = GetWalletsAvailableParams(
orderToken = orderToken,
userInfo = userInfo,
),
) { wallets, error ->
if (error != null) {
showWalletError(error)
return@getWalletsAvailable
}
googlePayButton.isVisible = WalletProvider.GOOGLE_PAY in wallets
}Después de que la disponibilidad tenga éxito, inicie la hoja al hacer clic en el botón. initElements requiere que se realice la llamada de disponibilidad primero.
googlePayButton.setOnClickListener {
deunaSDK.initElements(
context = this,
orderToken = orderToken,
userInfo = userInfo,
types = listOf(mapOf("name" to WalletProvider.GOOGLE_PAY.name)),
callbacks = elementsCallbacks,
)
}Consulta pago de google para los detalles de registro, pruebas y tokenización.
Continúe con una acción pendiente#
Utilice el mismo token de pedido cuando DEUNA informe que el pago requiere un desafío o redirección 3DS compatible.
deunaSDK.initNextAction(
context = this,
orderToken = orderToken,
callbacks = nextActionCallbacks,
)El SDK abre las URL externas compatibles y regresa al widget activo. Utilice el estado de llamada de retorno para la interfaz y un webhook verificado para la ejecución.
Abrir un cupón#
deunaSDK.initVoucherWidget(
context = this,
orderToken = orderToken,
callbacks = voucherCallbacks,
)Las llamadas de retorno de los vouchers siguen el mismo ciclo de éxito, error, cierre y envío de eventos que las otras experiencias de pago.
Datos de fraude del dispositivo#
Inicialice las proveedores de fraude nativos configurados, como en Application.onCreate, con antelación, para reducir la latencia más adelante en el flujo de pago.
DeunaSDK.initializeFraudProviders(
context = applicationContext,
params = mapOf("MERCADOPAGO" to emptyMap<String, Any>()),
onError = { message -> logFraudError(message) },
)Genere el identificador combinado cuando lo necesite su pedido o flujo de riesgo:
deunaSDK.generateFraudId(
context = this,
callback = { fraudId -> attachFraudId(fraudId) },
)Incluya solo las dependencias y la configuración del proveedor de fraude asignadas a su cuenta. Consulte Integrar la huella digital del dispositivo.
Referencia del ciclo de vida y llamadas de retorno#
| Llamada de retorno o método | Úselo para |
|---|---|
onSuccess | Actualice la interfaz después de que la experiencia haya tenido éxito. |
onError | Maneje un tipo de PaymentsError o ElementsError. |
onClosed | Distinga entre el cierre controlado por el cliente y el SDK. |
onEventDispatch | Observe los eventos de ciclo de vida de checkout o Elements. |
onCardBinDetected | Reaccione a la detección de BIN de tarjeta en el Widget de Pago o Elements. |
onInstallmentSelected | Reaccione a la selección de un plan de cuotas. |
onPaymentProcessing | Evite acciones de pago duplicadas. |
close() | Cierre el modal activo después de que las vistas externas se hayan cerrado. |
Ejemplos y código fuente oficiales#
Consulta ExploreViewModel.kt para fábricas de configuración y EmbeddedScreen.kt para el manejo del ciclo de vida de WebView.