Manipular o retorno do navegador externo (callback_url)
Visão geral
Quando um fluxo de payment exige que o usuário conclua uma ação em um navegador externo (por exemplo, desafio 3DS, redirecionamento bancário), é essencial usar o callback_url para garantir que o usuário retorne ao seu aplicativo sem problemas.
1. Defina o callback_url ao criar a sessão de checkout
Enviar o callback_url ao criar a sessão de checkout:
{
"callback_url": "myapp://return"
}
ImportanteSem
callback_urlSe o usuário não conseguir acessar o aplicativo, ele poderá ser deixado no navegador sem nenhuma maneira de retornar ao aplicativo.
2. Configure seu aplicativo Android para lidar com o deep link
Adicionar um intent-filter para sua atividade principal em 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>- O esquema (
myapp) e host (return) deve corresponder ao seucallback_url
3. Lidar com a intenção em sua atividade
Em sua atividade, trate a intenção de retorno:
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()
}
}- Adapte essa lógica às necessidades de seu aplicativo
4. Exemplo completo: integração com o Yuno SDK
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")
}Práticas recomendadas
- Sempre defina e use
callback_urlem seus fluxos de payment - Configurar o
intent-filtercorretamente em seu manifesto - Tratar a intenção de retorno para atualizar o status payment ou navegar com o usuário
- Teste o fluxo em vários dispositivos e navegadores
Resumo
- Uso
callback_urlpara garantir que os usuários retornem ao seu aplicativo - Configurar o tratamento de links diretos no Android
- Lidar com a intenção de concluir o fluxo de payment
Atualizado há 7 meses