SDK Android
Installa l'SDK Android di DEUNA e integra i flussi di pagamento modal, embedded, wallet, voucher e "prossimo passo".
In questa pagina
- Installazione
- Inizializzazione
- Aprire il widget di pagamento in una finestra modale
- Esperienze disponibili
- Integrare un widget
- Archiviazione dei pagamenti e Click to Pay
- Google Pay nativo
- Continuare un'azione in sospeso
- Aprire un buono
- Dati fraud-device
- Riferimento a callback e ciclo di vita
- Esempi e codice sorgente ufficiali
Utilizza l'SDK Android di DEUNA per visualizzare esperienze di Checkout, Payment Widget, Payment Vault, Click to Pay, "prossimo passo", voucher e Google Pay native in applicazioni Kotlin. L'SDK supporta Android API 22 e versioni successive.
Installazione#
Aggiungi JitPack per la risoluzione delle dipendenze e specifica una versione rilasciata dell'SDK.
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven(url = "https://jitpack.io")
}
}android {
defaultConfig {
minSdk = 22
}
}
dependencies {
implementation("com.github.deuna-developers:deunasdk:<version>")
}Seleziona e specifica <version> dalla repository's releases. Eseguire test di aggiornamento nell'ambiente di test prima di implementare le modifiche nell'ambiente di produzione.
Inizializzazione#
Creare un'istanza SDK utilizzando la chiave API pubblica per l'ambiente selezionato e conservarla per il flusso di lavoro appropriato.
import com.deuna.maven.DeunaSDK
import com.deuna.maven.shared.Environment
val deunaSDK = DeunaSDK(
environment = Environment.SANDBOX,
publicApiKey = "YOUR_PUBLIC_API_KEY",
)Per un'istanza applicativa, inizializzare una sola volta l'SDK condiviso:
DeunaSDK.initialize(
environment = Environment.SANDBOX,
publicApiKey = "YOUR_PUBLIC_API_KEY",
)
val deunaSDK = DeunaSDK.sharedAprire il widget di pagamento in una finestra modale#
Costruisci callback di tipo e passa un Activity o un'altra interfaccia utente valida 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",
)Il componente host gestisce le viste del widget e del redirect. Chiamare close() Quando il flusso di successo o di errore è completato, attende che l'URL esterno attivo si chiuda prima di rilasciare il widget.
Esperienze disponibili#
| Esperienza | Metodo | Informazioni di input essenziali |
|---|---|---|
| Completamento del processo di pagamento | initCheckout(...) | context, orderToken, CheckoutCallbacks |
| Pagamento Widget | initPaymentWidget(...) | context, orderToken, PaymentWidgetCallbacks |
| Vault di pagamento | initElements(...) | context, ElementsCallbacks; types Può essere omesso |
| Clicca per pagare | initElements(...) | types = listOf(mapOf("name" to "click_to_pay")) |
| Prossimo passo | initNextAction(...) | Token per l'ordine che richiede un'ulteriore azione |
| Voucher | initVoucherWidget(...) | Token per l'ordine del buono |
Tutti i metodi supportati accettano opzionalmente input per lingua, frodi, user-agent e dominio, ove supportato. Non sovrascrivere. domain a meno che DEUNA non fornisca un host di integrazione specifico.
Integrare un widget#
La modalità integrata utilizza una configurazione definita e DeunaWidget. Questo esempio di Jetpack Compose renderizza il widget di pagamento e distrugge il suo WebView con il ciclo di vita dello schermo.
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() }
}Chiamata resume() e pause() quando il ciclo di vita contenente inizia e termina. Per un widget all'interno di uno schermo a scorrimento verticale, passa AutoResizeConfig nella configurazione e nella connessione setOnScrollByCallback allo stato di scroll del genitore.
Se la tua applicazione possiede il pulsante di pagamento, imposta hidePayButton = true nella configurazione e richiama il modulo integrato DeunaWidget estensione submit { result -> ... } dal tocco del pulsante.
Archiviazione dei pagamenti e Click to Pay#
Archiviazione dei pagamenti è l'esperienza predefinita di Elements. Fornire un account autenticato userToken o sufficiente UserInfo per identificare il 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" invece di "vault" per Click to Pay.
Google Pay nativo#
Verificare sia la configurazione del commerciante che il supporto del dispositivo prima di visualizzare il pulsante Google Pay. Il risultato viene memorizzato nella cache dall'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
}Dopo che la disponibilità ha avuto successo, avviare il modulo dal tocco del pulsante. initElements richiede la chiamata di disponibilità per prima.
googlePayButton.setOnClickListener {
deunaSDK.initElements(
context = this,
orderToken = orderToken,
userInfo = userInfo,
types = listOf(mapOf("name" to WalletProvider.GOOGLE_PAY.name)),
callbacks = elementsCallbacks,
)
}Consulta Google Pay per i dettagli di registrazione, test e tokenizzazione del commerciante.
Continuare un'azione in sospeso#
Utilizzare lo stesso token d'ordine quando DEUNA segnala che il pagamento richiede una sfida o reindirizzamento 3DS supportato.
deunaSDK.initNextAction(
context = this,
orderToken = orderToken,
callbacks = nextActionCallbacks,
)L'SDK apre le URL esterne supportate e ritorna al widget attivo. Utilizzare lo stato di callback per l'interfaccia e un webhook verificato per la finalizzazione.
Aprire un buono#
deunaSDK.initVoucherWidget(
context = this,
orderToken = orderToken,
callbacks = voucherCallbacks,
)Le callback per voucher seguono lo stesso ciclo di vita di successo, errore, chiusura ed invio di eventi come le altre esperienze di pagamento.
Dati fraud-device#
Inizializza in anticipo i provider fraud nativi configurati, ad esempio in Application.onCreate, per ridurre la latenza in seguito nel flusso di pagamento.
DeunaSDK.initializeFraudProviders(
context = applicationContext,
params = mapOf("MERCADOPAGO" to emptyMap<String, Any>()),
onError = { message -> logFraudError(message) },
)Genera l'identificatore combinato quando necessario:
deunaSDK.generateFraudId(
context = this,
callback = { fraudId -> attachFraudId(fraudId) },
)Includi solo le dipendenze e la configurazione del provider fraud assegnate al tuo account. Consulta Integrare l'impronta digitale del dispositivo.
Riferimento a callback e ciclo di vita#
| Callback o metodo | Usalo per |
|---|---|
onSuccess | Aggiorna l'interfaccia dopo il successo dell'esperienza. |
onError | Gestisci un input di tipo PaymentsError o ElementsError. |
onClosed | Differenzia la chiusura controllata dal cliente e da SDK. |
onEventDispatch | Monitora gli eventi di ciclo di vita supportati per il checkout o Elements. |
onCardBinDetected | Interagisci con la rilevazione del BIN della carta nel Payment Widget o Elements. |
onInstallmentSelected | Interagisci con la selezione di un piano di rateizzazione. |
onPaymentProcessing | Previene azioni di pagamento duplicate. |
close() | Chiudi la finestra modale attiva dopo che le visualizzazioni esterne sono state chiuse. |
Esempi e codice sorgente ufficiali#
Consulta il file ExploreViewModel.kt per i factory di configurazione e EmbeddedScreen.kt per la gestione del ciclo di vita di WebView.