SDK Android
Instale o SDK Android da DEUNA e integre fluxos de modal, embutido, carteira, voucher e próxima etapa.
Nesta página
- Instalação
- Inicialização
- Abra o Widget de Pagamento em um modal
- Experiências disponíveis
- Incorpore um widget
- Armazenamento de Pagamentos e Pagamento com Clique
- Google Pay nativo
- Continue uma ação pendente
- Abra um cupom
- Dados de dispositivos para prevenção de fraudes
- Referência do ciclo de vida e callbacks
- Exemplos e código-fonte oficiais
Utilize o SDK Android da DEUNA para exibir o Checkout completo, Widget de Pagamento, Cofre de Pagamentos, Click to Pay, próxima etapa, voucher e experiências nativas do Google Pay em aplicativos Kotlin. O SDK é compatível com Android API 22 e superior.
Instalação#
Adicione o JitPack para resolução de dependências e especifique uma versão do SDK.
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven(url = "https://jitpack.io")
}
}android {
defaultConfig {
minSdk = 22
}
}
dependencies {
implementation("com.github.deuna-developers:deunasdk:<version>")
}Selecione e especifique <version> da lista de releases. Teste as atualizações no ambiente de sandbox antes de implementá-las em produção.
Inicialização#
Crie uma instância do SDK com a chave API pública para o ambiente selecionado e mantenha-a para o fluxo correspondente.
import com.deuna.maven.DeunaSDK
import com.deuna.maven.shared.Environment
val deunaSDK = DeunaSDK(
environment = Environment.SANDBOX,
publicApiKey = "YOUR_PUBLIC_API_KEY",
)Para uma instância em toda a aplicação, inicialize o SDK compartilhado uma única vez:
DeunaSDK.initialize(
environment = Environment.SANDBOX,
publicApiKey = "YOUR_PUBLIC_API_KEY",
)
val deunaSDK = DeunaSDK.sharedAbra o Widget de Pagamento em um modal#
Implemente callbacks e passe um Activity ou outro valor válido de UI 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",
)O host do modal gerencia o widget e as visualizações de redirecionamento. Chame close() quando o fluxo de sucesso ou erro estiver completo; aguarde até que a URL externa esteja ativa antes de liberar o widget.
Experiências disponíveis#
| Experiência | Método | Entrada importante |
|---|---|---|
| Checkout completo | initCheckout(...) | context, orderToken, CheckoutCallbacks |
| Widget de pagamento | initPaymentWidget(...) | context, orderToken, PaymentWidgetCallbacks |
| Cofre de Pagamentos | initElements(...) | context, ElementsCallbacks; types pode ser omitido |
| Clique para pagar | initElements(...) | types = listOf(mapOf("name" to "click_to_pay")) |
| Próxima Ação | initNextAction(...) | Token para o pedido que requer uma ação adicional |
| Voucher | initVoucherWidget(...) | Token para o pedido de voucher |
Todos os métodos do modal aceitam entradas opcionais de idioma, prevenção de fraude, agente de usuário personalizado e domínio, sempre que suportado. Não sobrescreva domain a menos que a DEUNA forneça um host de integração específico.
Incorpore um widget#
O modo embutido utiliza uma configuração definida e DeunaWidget. Este exemplo do Jetpack Compose renderiza o Widget de Pagamento e destrói sua WebView com o ciclo de vida da tela.
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() }
}Ligar resume() e pause() quando o ciclo de vida contendo o widget começa e termina. Para um widget dentro de uma tela de rolagem vertical, passe AutoResizeConfig na configuração e conexão setOnScrollByCallback para o estado de rolagem do elemento pai.
Se sua aplicação possui o botão de pagamento, defina: hidePayButton = true na configuração e invocar o módulo integrado DeunaWidget extensão submit { result -> ... } a partir do toque no botão.
Armazenamento de Pagamentos e Pagamento com Clique#
O Armazenamento de Pagamentos é a experiência padrão do Elements. Forneça um usuário autenticado userToken ou informações suficientes UserInfo para identificar o 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" em vez de "vault" para o Click to Pay.
Google Pay nativo#
Verifique tanto a configuração do comerciante quanto o suporte do dispositivo antes de exibir o botão do Google Pay. O resultado é armazenado em cache pelo 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
}Após a verificação de disponibilidade, inicie a página a partir do toque no botão. initElements requer a chamada de disponibilidade primeiro.
googlePayButton.setOnClickListener {
deunaSDK.initElements(
context = this,
orderToken = orderToken,
userInfo = userInfo,
types = listOf(mapOf("name" to WalletProvider.GOOGLE_PAY.name)),
callbacks = elementsCallbacks,
)
}Consulte Google Pay para detalhes de inscrição, testes e tokenização.
Continue uma ação pendente#
Utilize o mesmo token de pedido quando a DEUNA informar que o pagamento requer um desafio ou redirecionamento 3DS suportado.
deunaSDK.initNextAction(
context = this,
orderToken = orderToken,
callbacks = nextActionCallbacks,
)O SDK abre URLs externas suportadas e retorna para o widget ativo. Utilize o estado de callback para a interface e um webhook verificado para a conclusão.
Abra um cupom#
deunaSDK.initVoucherWidget(
context = this,
orderToken = orderToken,
callbacks = voucherCallbacks,
)As chamadas de retorno (callbacks) para vouchers seguem o mesmo ciclo de sucesso, erro, fechamento e envio de eventos como as outras experiências de pagamento.
Dados de dispositivos para prevenção de fraudes#
Inicialize os provedores de prevenção de fraudes nativos configurados antecipadamente, por exemplo, em Application.onCreate, para reduzir a latência mais tarde no fluxo de pagamento.
DeunaSDK.initializeFraudProviders(
context = applicationContext,
params = mapOf("MERCADOPAGO" to emptyMap<String, Any>()),
onError = { message -> logFraudError(message) },
)Gere o identificador combinado quando necessário:
deunaSDK.generateFraudId(
context = this,
callback = { fraudId -> attachFraudId(fraudId) },
)Inclua apenas as dependências e a configuração do provedor de fraudes atribuídas à sua conta. Consulte Integrar impressão digital do dispositivo.
Referência do ciclo de vida e callbacks#
| Callback ou método | Utilize-o para |
|---|---|
onSuccess | Atualize a interface após a conclusão da experiência. |
onError | Lide com um tipo de PaymentsError ou ElementsError. |
onClosed | Diferencie o fechamento controlado pelo cliente e pelo SDK. |
onEventDispatch | Monitore os eventos de ciclo de vida suportados para checkout ou Elements. |
onCardBinDetected | Reaja à detecção do BIN do cartão no Payment Widget ou Elements. |
onInstallmentSelected | Reaja à seleção de um plano de parcelamento. |
onPaymentProcessing | Impede ações de pagamento duplicadas. |
close() | Feche o modal ativo após o fechamento de visualizações externas. |
Exemplos e código-fonte oficiais#
Consulte o arquivo ExploreViewModel.kt para fábricas de configuração e EmbeddedScreen.kt para o gerenciamento do ciclo de vida do WebView.