Passa al contenuto principale
In questa pagina

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.

settings.gradle.ktsKotlin
dependencyResolutionManagement {
  repositories {
    google()
    mavenCentral()
    maven(url = "https://jitpack.io")
  }
}
app/build.gradle.ktsKotlin
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.

Kotlin
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:

Kotlin
DeunaSDK.initialize(
  environment = Environment.SANDBOX,
  publicApiKey = "YOUR_PUBLIC_API_KEY",
)

val deunaSDK = DeunaSDK.shared

Aprire il widget di pagamento in una finestra modale#

Costruisci callback di tipo e passa un Activity o un'altra interfaccia utente valida Context:

Kotlin
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#

EsperienzaMetodoInformazioni di input essenziali
Completamento del processo di pagamentoinitCheckout(...)context, orderToken, CheckoutCallbacks
Pagamento WidgetinitPaymentWidget(...)context, orderToken, PaymentWidgetCallbacks
Vault di pagamentoinitElements(...)context, ElementsCallbacks; types Può essere omesso
Clicca per pagareinitElements(...)types = listOf(mapOf("name" to "click_to_pay"))
Prossimo passoinitNextAction(...)Token per l'ordine che richiede un'ulteriore azione
VoucherinitVoucherWidget(...)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.

Kotlin
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.

Kotlin
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.

Kotlin
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.

Kotlin
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.

Kotlin
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#

Kotlin
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.

Kotlin
DeunaSDK.initializeFraudProviders(
  context = applicationContext,
  params = mapOf("MERCADOPAGO" to emptyMap<String, Any>()),
  onError = { message -> logFraudError(message) },
)

Genera l'identificatore combinato quando necessario:

Kotlin
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 metodoUsalo per
onSuccessAggiorna l'interfaccia dopo il successo dell'esperienza.
onErrorGestisci un input di tipo PaymentsError o ElementsError.
onClosedDifferenzia la chiusura controllata dal cliente e da SDK.
onEventDispatchMonitora gli eventi di ciclo di vita supportati per il checkout o Elements.
onCardBinDetectedInteragisci con la rilevazione del BIN della carta nel Payment Widget o Elements.
onInstallmentSelectedInteragisci con la selezione di un piano di rateizzazione.
onPaymentProcessingPreviene 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.