メインコンテンツへスキップ
このページで

DEUNA Android SDKを使用して、Kotlinアプリケーションで、完全なチェックアウト、決済ウィジェット、決済ウォレット、クリックによる決済、次アクション、バウチャー、およびネイティブのGoogle Pay体験を表示します。 SDKはAndroid API 22以降をサポートしています。

インストール#

依存関係解決に JitPack を追加し、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>")
}

選択し、固定します <version> リポジトリの リリース。本番環境への展開前に、サンドボックス環境でのテストを必ず実施してください。

初期化#

選択した環境の公開 API キーを使用して、1 つの SDK インスタンスを作成し、所有フローで保持します。

Kotlin
import com.deuna.maven.DeunaSDK
import com.deuna.maven.shared.Environment

val deunaSDK = DeunaSDK(
  environment = Environment.SANDBOX,
  publicApiKey = "YOUR_PUBLIC_API_KEY",
)

アプリケーション全体で、共有された SDK を 1 回初期化します。

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

val deunaSDK = DeunaSDK.shared

Payment Widget をモーダルで開きます。#

タイプされたコールバックを作成し、 Activity または、別の有効なUI 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",
)

モダールホストは、ウィジェットとリダイレクトビューを管理します。 close() ウィジェットの動作が完了またはエラーが発生した場合、外部URLが閉じられるまで待機してからウィジェットを解放します。

利用可能な機能#

体験メソッド重要な入力
完了initCheckout(...)context, orderToken, CheckoutCallbacks
決済ウィジェットinitPaymentWidget(...)context, orderToken, PaymentWidgetCallbacks
支払いVaultinitElements(...)context, ElementsCallbacks; types 省略可能
クリック・トゥ・ペイinitElements(...)types = listOf(mapOf("name" to "click_to_pay"))
次のアクションinitNextAction(...)注文に必要な次のアクションのためのトークン
バウチャーinitVoucherWidget(...)バウチャー注文用のトークン

すべてのモーダルメソッドは、サポートされている場合に、オプションの言語、不正検知、カスタムユーザーエージェント、およびドメインの入力を受け付けます。オーバーライドしないでください。 domain DEUNAから特定の統合ホストが提供されない場合

決済ウィジェットの埋め込み#

埋め込みモードでは、定義済みの設定を使用します。 DeunaWidgetこのJetpack Composeの例では、決済ウィジェットと、画面のライフサイクルと共にWebViewをレンダリングし、破棄します。

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() }
}

コール resume() および pause() 縦方向にスクロールする画面内のウィジェットの場合、 AutoResizeConfig 設定で接続し、 setOnScrollByCallback 親コンポーネントの状態に接続します。

アプリケーションが決済ボタンを所有している場合は、 hidePayButton = true 設定で有効にし、組み込みの DeunaWidget 機能を使用します。 submit { result -> ... } ボタンのタップから呼び出します。

Payment Vault と Click to Pay#

Payment Vault は、標準の Elements の体験です。 認証された userToken クレデンシャル、または UserInfo 顧客を識別するために。

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,
)

使用する "click_to_pay" 代わりに "vault" Click to Pay 用。

ネイティブ Google Pay#

Google Pay ボタンを表示する前に、商人の設定とデバイスのサポートの両方を確認してください。 結果は 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
}

利用可能になった場合に、ボタンのタップからシートを起動します。 initElements 最初に利用可能状態の呼び出しが必要です。

Kotlin
googlePayButton.setOnClickListener {
  deunaSDK.initElements(
    context = this,
    orderToken = orderToken,
    userInfo = userInfo,
    types = listOf(mapOf("name" to WalletProvider.GOOGLE_PAY.name)),
    callbacks = elementsCallbacks,
  )
}

詳細は Google Pay 商人の登録、テスト、およびトークン化に関する詳細については。

保留中の操作を続行#

DEUNA が支払いに対してサポートされている 3DS チャレンジまたはリダイレクトが必要であると報告した場合、同じ注文トークンを使用してください。

Kotlin
deunaSDK.initNextAction(
  context = this,
  orderToken = orderToken,
  callbacks = nextActionCallbacks,
)

SDK はサポートされている外部 URL を開き、アクティブなウィジェットに戻ります。 インターフェースと履行のための検証済み Webhook を使用してください。

クーポンを開く#

Kotlin
deunaSDK.initVoucherWidget(
  context = this,
  orderToken = orderToken,
  callbacks = voucherCallbacks,
)

バウチャーのコールバックは、他の決済体験と同様に、成功、エラー、クローズ、およびイベント送信のライフサイクルに従います。

不正利用デバイスデータ#

事前に、例えば、 Application.onCreateなどの設定済みのネイティブ不正利用プロバイダーを初期化することで、後続の決済フローにおける遅延を軽減します。

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

必要に応じて、注文またはリスクフローで、結合された識別子を生成します。

Kotlin
deunaSDK.generateFraudId(
  context = this,
  callback = { fraudId -> attachFraudId(fraudId) },
)

アカウントに割り当てられた不正利用プロバイダーの依存関係と設定のみを含めます。詳細は、 デバイスフィンガープリントを統合.

コールバックとライフサイクル参照を参照してください。#

コールバックまたはメソッドこれを使用してください
onSuccess体験が成功した場合にインターフェースを更新します。
onErrorタイプされた PaymentsError または ElementsError.
onClosed顧客とSDKによって制御されたクローズを区別します。
onEventDispatchサポートされているチェックアウトまたはElementsのライフサイクルイベントを監視します。
onCardBinDetectedPayment WidgetまたはElementsでカードBIN検出に応答します。
onInstallmentSelected分割払いプランの選択に応答します。
onPaymentProcessing重複した決済アクションを防止します。
close()外部ビューが閉じられた後に、アクティブなモーダルを閉鎖します。

公式の例とソースコード#

例の ExploreViewModel.kt 構成ファクトリと EmbeddedScreen.kt WebViewのライフサイクル処理に関する情報。