Manejar el retorno del navegador externo (callback_url)
Visión general
Cuando un flujo de pago requiere que el usuario complete una acción en un navegador externo (por ejemplo, desafío 3DS, redirección bancaria), es esencial utilizar la función callback_url para garantizar que el usuario vuelva a tu aplicación sin problemas.
1. Establezca la callback_url al crear la sesión de pago
Envía el callback_url al crear la sesión de pago:
{
"callback_url": "myapp://return"
}
ImportanteSin
callback_url, el usuario puede quedarse en el navegador sin forma de volver a tu aplicación.
2. Configure tu aplicación Android para manejar el enlace profundo
Añadir un intent-filter a su actividad principal en AndroidManifest.xml:
<activity android:name=".YourMainActivity">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="myapp"
android:host="return" />
</intent-filter>
</activity>- El régimen (
myapp) y anfitrión (return) deben coincidir con sucallback_url
3. Maneje la intención en su actividad
En su actividad, gestione la intención de devolución:
intent.data?.let { uri ->
val url = uri.toString()
if (url.contains("myapp://return")) {
// Handle the return, e.g., show a message or navigate
Toast.makeText(this, "Returned from payment flow", Toast.LENGTH_SHORT).show()
}
}- Adapta esta lógica a las necesidades de tu aplicación
4. Ejemplo completo: integración con el SDK de Yuno
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
startCheckout(
callbackPaymentState = {
Toast.makeText(this, it, Toast.LENGTH_SHORT).show()
}
)
if (intent?.data != null) {
intent.data?.let {
if (it.toString().contains(URI_INTENT_CONTINUE)) {
val sessionId = extractCheckoutSessionFromIntent(intent)
continuePayment(
showPaymentStatus = configuration.showStatusYuno,
checkoutSession = sessionId,
countryCode = configuration.country,
) { result ->
result?.let {
Toast.makeText(this, it, Toast.LENGTH_SHORT).show()
}
}
}
}
} else {
setContent {
YunoContent(configuration) {
initYuno()
}
}
}
}
private fun extractCheckoutSessionFromIntent(intent: Intent?): String? {
return intent?.data?.getQueryParameter("checkoutSession")
}Buenas prácticas
- Defina y utiliza siempre
callback_urlen tu flujo de pago - Configura el
intent-filtercorrectamente en su manifiesto - Manejar la intención de retorno para actualizar el estado de pago o navegar por el usuario
- Pruebe el flujo en varios dispositivos y navegadores
Resumen
- Usar
callback_urlpara que los usuarios vuelvan a tu aplicación - Configurar la gestión de enlaces profundos en Android
- Manejar la intención de completar el flujo de pago
Actualizado hace 7 meses