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

要件#

DEUNA iOS SDK統合の要件を確認してください:

  • Swiftバージョン: 5.8以上
  • Xcodeバージョン: 16.0以上
  • デプロイメントターゲット: コアモーダルエクスペリエンスはiOS 13.0以上、埋め込みSwiftUIはiOS 14.0以上 DeunaWidget
  • DEUNA認証情報: アクティブなアカウントと有効な認証情報(認証情報の取得に遅延が発生する場合は support@deuna.com に連絡)

インストール#

DEUNA iOS SDKをインストールする方法は2つあります:

Swift Package Manager(推奨)

  1. Xcodeで、次の場所に移動します: ファイル → パッケージ依存関係を追加...
  2. 検索バーにリポジトリURLを入力します:
    Plain text
    https://github.com/deuna-developers/deuna-sdk-ios
  3. パッケージ依存関係ルールをバージョンに固定します 2.12.6 (またはそれ以上)。
  4. この場合、 パッケージ製品を選択 ダイアログが表示されます:
    • 選択 DeunaSDK アプリケーションターゲットにリンクします。
    • 他のすべての製品(DeunaSDKCybersource, DeunaSDKKount, DeunaSDKRiskified, DeunaSDKSift, DeunaSDKSignifyd, DeunaSDKMercadoPago, DeunaSDKAccertify)を なし に設定します。ただし、その特定の不正防止プロバイダーを統合で使用する場合は除きます。

CocoaPods

iOSプロジェクトでCocoaPodsを使用する場合:

  1. 最小デプロイメントターゲットを指定し、 DeunaSDK あなたへの Podfile:
PodfileRuby
platform :ios, '14.0'

target 'YourApp' do
  use_frameworks!
  pod 'DeunaSDK', '~> 2.12.6'

  # Add ONLY the optional fraud provider subspecs you need:
  # pod 'DeunaSDK/MercadoPago'
  # pod 'DeunaSDK/Riskified'
  # pod 'DeunaSDK/Cybersource'
  # pod 'DeunaSDK/Signifyd'
  # pod 'DeunaSDK/Kount'
  # pod 'DeunaSDK/Sift'
  # pod 'DeunaSDK/Accertify'
end
  1. 実行:
Shell
pod install
  1. ユーザースクリプトのサンドボックス化を無効にする:Xcodeで、ターゲットの ビルド設定に移動し、 User Script Sandboxing (ENABLE_USER_SCRIPT_SANDBOXINGを検索して、 なし.

バウチャー/領収書ダウンロードに必要な権限

初期化#

Swift
import DeunaSDK

アプリのアーキテクチャに応じて、SDKを2つの方法で初期化できます:

グローバル共有インスタンス

に追加してください。 AppDelegate または App 初期化子など)で一度だけ初期化し、その後は DeunaSDK.shared:

Swift
DeunaSDK.initialize(
  environment: .sandbox, // .sandbox or .production
  publicApiKey: "YOUR_PUBLIC_API_KEY"
)

let deunaSDK = DeunaSDK.shared

コーディネーターまたは画面インスタンス経由でどこからでもアクセスできます。

特定の画面またはコーディネーター用のインスタンスを作成して保持する:

Swift
let deunaSDK = DeunaSDK(
  environment: .sandbox,
  publicApiKey: "YOUR_PUBLIC_API_KEY"
)

Payment Widget の起動#

Payment Widgetは、顧客に複数の支払い方法を提供します:

  • クレジットカードおよびデビットカード:Visa、Mastercard、American Express、およびコブランドカード。
  • 代替支払い方法(APM):OXXO、KueskiPay、Aplazo、Daviplata、Nequiなど。
  • デジタルウォレット:Apple Pay および PayPal。

モーダルで表示

コール initPaymentWidget あなたの DeunaSDK インスタンス上で:

Swift
deunaSDK.initPaymentWidget(
  orderToken: "YOUR_ORDER_TOKEN",
  callbacks: PaymentWidgetCallbacks(
    onSuccess: { order in
      deunaSDK.close() // Close the payment widget modal
      // YOUR CODE HERE: Handle successful payment (e.g. navigate to confirmation screen)
    },
    onError: { error in
      // Error handling
      if error.type == .initializationFailed {
        deunaSDK.close() // Close the widget if initialization fails
        // YOUR CODE HERE: Handle initialization failure (e.g. show alert or fallback)
        return
      }
      if error.type == .paymentError {
        // YOUR CODE HERE: Handle payment processing failure (e.g. prompt user to retry)
      }
    },
    onClosed: { action in
      // Widget closed
      // action == .userAction (dismissed manually by customer) or .systemAction (closed via code)
      // YOUR CODE HERE: Handle modal dismissal
    },
    onCardBinDetected: { metadata in
      guard metadata != nil else { return }
      // YOUR CODE HERE: Handle card brand or BIN detection (e.g. apply discounts)
    },
    onInstallmentSelected: { installment in
      // YOUR CODE HERE: Handle installment plan selection
    },
    onPaymentProcessing: {
      // YOUR CODE HERE: Payment processing started (e.g. disable external buttons)
    },
    onEventDispatch: { event, payload in
      // YOUR CODE HERE: Track analytics event
    }
  ),
  userToken: "YOUR_USER_TOKEN", // optional
  styleFile: "YOUR_STYLE_FILE_UUID", // optional
  language: "en" // optional: "es", "en", "pt"
)

パラメータリファレンス

パラメータTypeモーダル埋め込み説明
orderTokenString✅✅必須。DEUNA APIで作成された注文の一意トークン。

重要: アプリ内で redirect_url を実行させたい場合は、注文作成時に onSuccess を定義しないでください。
callbacksPaymentWidgetCallbacks✅✅必須。ウィジェットイベントを監視するコールバック (onSuccess, onError, onClosed, onCardBinDetected, onInstallmentSelected, onPaymentProcessing, onEventDispatch).
userTokenString?✅✅任意。顧客のDEUNAベアラートークン。

重要:保存済みカードを表示するには、注文作成時に渡された userToken は注文作成時の billing_address.email と一致する必要があります。
styleFileString?✅✅任意。カスタムテーマブランディング(色、タイポグラフィ、ロゴ)を適用するためのDEUNA提供のUUID。
paymentMethods[[String: Any]]?✅✅任意。ダイレクトフォームフロー用の単一の支払い方法を定義する配列(例: [["paymentMethod": "bnpl", "processors": ["kueski"]]]).
languageString?✅✅任意。言語コード("es", "en", "pt")。加盟店のデフォルト設定を上書きします。
behaviorWidgetBehavior?✅✅任意。フローカスタマイズ(例: WidgetBehavior(paymentMethods: ["flowType": "twoStep"]) PayPal用、またはSplit Payments WidgetBehavior(paymentMethods: ["creditCard": ["splitPayments": ["maxCards": 2]]]).
fraudCredentials[String: Any]?✅✅任意。不正防止プロバイダー認証情報(例: ["RISKIFIED": ["storeDomain": "yourdomain.com"]]).
domainString?✅✅任意。デフォルトのベースホスト(https://pay.deuna.io).
hidePayButtonBool❌✅任意. 埋め込みモードで、アプリケーションがネイティブボタンをレンダリングする場合、組み込みの支払いボタンを非表示にします。

利用可能な機能#

体験メソッド設定タイプ重要な入力
支払いウィジェットinitPaymentWidget(...)PaymentWidgetConfigurationorderToken, PaymentWidgetCallbacks
支払いVaultinitElements(...)ElementsWidgetConfigurationElementsCallbacks; types 省略可能
クリック・トゥ・ペイinitElements(...)ElementsWidgetConfigurationtypes: [["name": ElementsWidget.clickToPay]]
次のアクションinitNextAction(...)NextActionWidgetConfiguration別のアクションを必要とする注文のトークン
バウチャーinitVoucher(...)VoucherWidgetConfigurationバウチャー注文用のトークン

SwiftUIを使用してウィジェットを埋め込みます。#

iOS 14 以降では、 DeunaWidget を使用して、支払いエクスペリエンスを SwiftUI 階層内に埋め込んでレンダリングします。

Swift
import DeunaSDK
import SwiftUI

struct EmbeddedCheckoutScreen: View {
  let deunaSDK: DeunaSDK
  let orderToken: String

  var body: some View {
    VStack {
      DeunaWidget(
        deunaSDK: deunaSDK,
        configuration: PaymentWidgetConfiguration(
          orderToken: orderToken,
          callbacks: PaymentWidgetCallbacks(
            onSuccess: { order in
              // Explicitly release widget resources to prevent memory leaks
              deunaSDK.dispose()
              // YOUR CODE HERE: Handle successful payment
            },
            onError: { error in
              if error.type == .paymentError {
                // YOUR CODE HERE: Handle payment error
              }
            },
            onEventDispatch: { event, payload in
              // YOUR CODE HERE: Track analytics event
            }
          ),
          userToken: nil,
          styleFile: nil
        )
      )
    }
  }
}

自動リサイズとキーボード処理を備えた埋め込み

デフォルトでは、 DeunaWidget は固定高さでコンテナを埋めます。 autoResizeConfig: AutoResizeConfig(initialHeight: 100)を渡すと、ウィジェットは自動リサイズモードに切り替わり、WebViewコンテンツの高さに合わせて動的に拡大・縮小します。

内部に埋め込まれた場合、 ScrollViewを使用します。 ScrollViewFinder 基盤となる UIScrollView をキャプチャして配線する onScrollNeeded フォーカスされたフィールドは自動的にキーボードの上にスクロールします:

Swift
import DeunaSDK
import SwiftUI
import UIKit

struct MyCheckoutView: View {
  let deunaSDK: DeunaSDK
  let widgetConfig: DeunaWidgetConfiguration

  @State private var outerScrollView: UIScrollView?

  var body: some View {
    ScrollView {
      VStack(spacing: 0) {
        // Invisible helper capturing the underlying UIScrollView
        Color.clear.frame(height: 0)
          .background(ScrollViewFinder { sv in outerScrollView = sv })

        // Your content above the widget

        DeunaWidget(deunaSDK: deunaSDK, configuration: widgetConfig)
          .onScrollNeeded { overlap in
            guard let sv = outerScrollView else { return }
            let newOffset = CGPoint(x: 0, y: sv.contentOffset.y + overlap)
            UIView.animate(withDuration: 0.25, delay: 0, options: .curveEaseOut) {
              sv.setContentOffset(newOffset, animated: false)
            }
          }

        // Your content below the widget
      }
    }
  }
}

/// Traverses UIKit view hierarchy to capture the parent UIScrollView
struct ScrollViewFinder: UIViewRepresentable {
  let onFound: (UIScrollView) -> Void

  func makeUIView(context: Context) -> UIView {
    let view = UIView()
    view.isHidden = true
    DispatchQueue.main.async {
      var parent = view.superview
      while let p = parent {
        if let sv = p as? UIScrollView { onFound(sv); return }
        parent = p.superview
      }
    }
    return view
  }

  func updateUIView(_ uiView: UIView, context: Context) {}
}

をComposeのhidePayButton)

アプリケーションがウィジェットの外側に独自のネイティブボタンをレンダリングする場合は、 hidePayButton: true 手動で支払いを実行し、 isValid および submit:

Swift
let configuration = PaymentWidgetConfiguration(
  orderToken: orderToken,
  callbacks: callbacks,
  hidePayButton: true
)

// When the user taps your native pay button:
deunaSDK.isValid { isValid in
  guard isValid else {
    showValidationWarning()
    return
  }

  deunaSDK.submit { result in
    if result["status"] as? String == "error" {
      print("Submit failed:", result["message"] ?? "")
    }
  }
}
メソッド説明戻り値
deunaSDK.isValid { valid in ... }アクティブな支払いフォームのユーザー入力を検証します。Bool
deunaSDK.submit { result in ... }ウィジェットボタンをクリックするのと同等の支払いを送信します。[String: Any] (status: "success" または status: "error")

支払い方法のフィルタリングと設定#

ダイレクトフォームフロー (paymentMethods)

アプリがウィジェット外に独自のネイティブボタンをレンダリングする場合、 フォームフロー.

を渡し、 paymentMethods は配列型で、現在のチェックアウトエンジンは以下をサポートしています は配列として型付けされていますが、内部のチェックアウトエンジンは現在 DEUNAチェックアウトアーキテクチャは、個別の支払いフォームに直接起動することをサポートしています。これは

Swift
deunaSDK.initPaymentWidget(
  orderToken: orderToken,
  callbacks: callbacks,
  paymentMethods: [
    [
      "paymentMethod": "bnpl",
      "processors": ["kueski"]
    ]
  ]
)

設定の優先順位解決

優先度ソース動作
1 (最高)paymentMethods を返します .initPaymentWidget()ダイレクトフォームフロー:指定された単一の支払い方法フォーム(例:Kueski)に直ちに開き、方法セレクターをバイパスします。
2include_payment_options 注文作成時複数方法選択:注文作成時に指定され、かつアカウントで有効な支払い方法のみを表示します。
3 (フォールバック)マーチャントレベル設定 (/payment-methods)フルセレクター:SDK呼び出しと注文ペイロードの両方で省略された場合、マーチャントアカウントに設定されたすべての有効な支払い方法を表示します。

PayPal設定

フロータイプ (flowType)

Swift
deunaSDK.initPaymentWidget(
  orderToken: orderToken,
  behavior: WidgetBehavior(
    paymentMethods: [
      "flowType": "twoStep" // "twoStep" (summary first) or "singleStep" (direct)
    ]
  )
)

自動購入 (express)

顧客が以前にPayPalでクイック支払いを承認している場合、即時処理を有効にします:

Swift
deunaSDK.initPaymentWidget(
  orderToken: orderToken,
  callbacks: callbacks,
  paymentMethods: [
    [
      "paymentMethod": "wallet",
      "processors": ["paypal_wallet"],
      "configuration": ["express": true]
    ]
  ]
)

動的スタイリングと注文更新#

外観を動的にカスタマイズ (setCustomStyle)

を省略し、注文作成時に

Swift
deunaSDK.setCustomStyle(data: [
  "theme": [
    "colors": [
      "primaryTextColor": "#023047",
      "buttonPrimaryFill": "#FFB703",
      "buttonPrimaryText": "#000000"
    ]
  ]
])

注文合計を更新 (refetchOrder)

でオプションをフィルタリングするか、DEUNAマーチャントポータルで支払い方法を設定します。 onCardBinDetectedバックエンドで注文を更新し、ウィジェットに通知します:

Swift
callbacks: PaymentWidgetCallbacks(
  onCardBinDetected: { metadata in
    guard let brand = metadata?["cardBrand"] as? String, brand == "Mastercard" else { return }

    Task {
      await applyDiscountOnBackend(orderId, promoCode: "MASTERCARD_20")
      deunaSDK.refetchOrder { updatedOrder in
        print("Order refreshed with discount:", updatedOrder)
      }
    }
  }
)

Payment Vault と Click to Pay#

Payment Vaultは、カードを安全に保存し、通常のチェックアウトを処理せずにClick to Payで支払いを行うことができるDEUNA Paymentソリューションのコンポーネントです。

モーダルで表示

Swift
deunaSDK.initElements(
  userToken: "<USER_TOKEN>", // optional if userInfo is provided
  userInfo: DeunaSDK.UserInfo(
    firstName: "Esteban", // optional if userToken is provided
    lastName: "Posada", // optional if userToken is provided
    email: "esteban@deuna.com" // required
  ),
  callbacks: ElementsCallbacks(
    onSuccess: { response in
      deunaSDK.close() // Close the Vault widget
      // YOUR CODE HERE: Handle card saved successfully
    },
    onError: { error in
      deunaSDK.close() // Close the Vault widget on error
      // YOUR CODE HERE: Handle error
    },
    onClosed: { action in
      // Widget closed: action == .userAction or .systemAction
      // YOUR CODE HERE: Handle widget dismissal
    },
    onEventDispatch: { type, response in
      // YOUR CODE HERE: Listen to widget events
    }
  ),
  orderToken: "YOUR_ORDER_TOKEN", // optional
  widgetExperience: ElementsWidgetExperience( // optional
    userExperience: ElementsWidgetExperience.UserExperience(
      showSavedCardFlow: true, // optional: show card saving toggle
      defaultCardFlow: true // optional: show toggle to save as default
    )
  )
)

埋め込み表示(SwiftUI)

Swift
DeunaWidget(
  deunaSDK: deunaSDK,
  configuration: ElementsWidgetConfiguration(
    callbacks: ElementsCallbacks(
      onSuccess: { response in
        deunaSDK.dispose() // Explicitly release widget resources
        // YOUR CODE HERE: Handle success
      },
      onError: { error in
        // YOUR CODE HERE: Handle error
      },
      onEventDispatch: { type, response in
        // YOUR CODE HERE: Listen to widget events
      }
    ),
    userInfo: DeunaSDK.UserInfo(
      firstName: "Esteban",
      lastName: "Posada",
      email: "esteban@deuna.com"
    ),
    orderToken: "YOUR_ORDER_TOKEN",
    autoResizeConfig: AutoResizeConfig(initialHeight: 150)
  )
)

クリック・トゥ・ペイ

Swift
deunaSDK.initElements(
  userInfo: DeunaSDK.UserInfo( // mandatory for Click To Pay
    firstName: "Esteban",
    lastName: "Posada",
    email: "esteban@deuna.com"
  ),
  callbacks: ElementsCallbacks(
    onSuccess: { data in
      deunaSDK.close() // Close the widget
      // YOUR CODE HERE: Handle Click to Pay success
    },
    onError: { error in
      deunaSDK.close() // Close the widget
      // YOUR CODE HERE: Handle error
    },
    onClosed: { action in
      // YOUR CODE HERE: Handle widget dismissal
    },
    onEventDispatch: { type, data in
      // YOUR CODE HERE: Listen to widget events
    }
  ),
  types: [
    [
      "name": ElementsWidget.clickToPay // Pass this to render Click to Pay
    ]
  ]
)

パラメータリファレンス

パラメータTypeモーダル埋め込み説明
callbacksElementsCallbacks✅✅必須. イベントリスナー (onSuccess, onError, onClosed, onEventDispatch).
userInfoDeunaSDK.UserInfo?✅✅顧客の firstName, lastName, および email。Click to Payに必須。
userTokenString?✅✅任意。DEUNAベアラートークン。指定する場合は userInfo.
types[[String: Any]]?✅✅任意を省略します。デフォルトのCard Vaultエクスペリエンスをレンダリングするには省略します。Click to Payをレンダリングするには [["name": ElementsWidget.clickToPay]] を指定します。
orderTokenString?✅✅任意。一意の注文トークン。顧客詳細は billing_address.
styleFileString?✅✅任意から抽出できます。テーマカスタマイズUUID。
widgetExperienceElementsWidgetExperience?✅✅任意. showSavedCardFlow (カード保存トグル)と defaultCardFlow (デフォルトとして保存トグル)。
domainString?✅✅任意。ホストを上書きします(https://elements.deuna.com).
hidePayButtonBool❌✅任意。埋め込み時にボタンを非表示にします。カスタムボタンには isValid および submit を使用します。

ネイティブ Apple Pay#

Apple Payボタンをレンダリングする前に、マーチャントの設定とデバイスの機能を確認します。

Swift
let userInfo = DeunaSDK.UserInfo(email: "ada@example.com")
let params = GetWalletsAvailableParams(
  orderToken: "YOUR_ORDER_TOKEN",
  userInfo: userInfo
)

deunaSDK.getWalletsAvailable(params: params) { wallets, error in
  if let error = error {
    // YOUR CODE HERE: Handle wallet availability check error
    return
  }

  // Check if Apple Pay is available on this device and merchant account
  let isApplePayAvailable = wallets.contains(.applePay)
  // YOUR CODE HERE: Update Apple Pay button visibility in UI
}

利用可能な状態が確認できたら、ネイティブのApple Payシートを起動します。 initElements:

Swift
deunaSDK.initElements(
  userInfo: userInfo,
  callbacks: ElementsCallbacks(
    onSuccess: { data in
      // YOUR CODE HERE: Handle Apple Pay authorization success
    },
    onError: { error in
      // YOUR CODE HERE: Handle Apple Pay error
    },
    onClosed: { action in
      // YOUR CODE HERE: Handle Apple Pay sheet dismissal
    }
  ),
  types: [
    ["name": "APPLE_PAY"]
  ],
  orderToken: "YOUR_ORDER_TOKEN"
)

アプリケーションには、Apple Payの権限と、商人の識別子を含むプロビジョニングプロファイルが必要です。詳細は、 Apple Pay の統合について説明します を参照してください。

保留中の操作を続行#

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

Swift
deunaSDK.initNextAction(
  orderToken: "YOUR_ORDER_TOKEN",
  callbacks: NextActionCallbacks(
    onSuccess: { order in
      deunaSDK.close()
      // YOUR CODE HERE: Handle 3DS or action completion
    },
    onError: { error in
      deunaSDK.close()
      // YOUR CODE HERE: Handle error
    },
    onClosed: { action in
      // YOUR CODE HERE: Handle modal dismissal
    }
  )
)

SDKは、サポートされている外部URLを開き、制御をウィジェットに戻します。インターフェースにはコールバックの状態を使用し、履行には最終的なDEUNA支払い状態を使用します。

クーポンを開く#

Swift
deunaSDK.initVoucher(
  orderToken: "YOUR_ORDER_TOKEN",
  callbacks: VoucherCallbacks(
    onSuccess: { order in
      // YOUR CODE HERE: Handle voucher display
    },
    onError: { error in
      // YOUR CODE HERE: Handle error
    },
    onClosed: { action in
      // YOUR CODE HERE: Handle modal dismissal
    }
  )
)

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

不正デバイスデータとフィンガープリンティング#

DEUNA iOS SDKは モジュラーアーキテクチャを採用しています: デフォルトではサードパーティの不正防止SDKをバンドルしません。 使用する特定のプロバイダーのみを追加してください。 プロバイダーを使用しない場合、アプリサイズのペナルティは発生しません。

対応プロバイダー

プロバイダSPMプロダクトCocoaPodsサブスペック必須パラメータ
MERCADOPAGODeunaSDKMercadoPagopod 'DeunaSDK/MercadoPago'(不要 - [:])
RISKIFIEDDeunaSDKRiskifiedpod 'DeunaSDK/Riskified'storeDomain
CYBERSOURCEDeunaSDKCybersourcepod 'DeunaSDK/Cybersource'orgId, merchantId (オプション: fpServer)
SIGNIFYDDeunaSDKSignifydpod 'DeunaSDK/Signifyd'orgId (オプション: fpServer)
KOUNTDeunaSDKKountpod 'DeunaSDK/Kount'merchantId, clientId, dataCollectorUrl, environment
SIFTDeunaSDKSiftpod 'DeunaSDK/Sift'accountId, beaconKey
ACCERTIFYDeunaSDKAccertifypod 'DeunaSDK/Accertify'Xcodeバンドルリソース内の設定ファイル

Accertifyバンドルアセットの設定

Accertify統合には、Xcodeプロジェクト内に2つの設定ファイルが必要です。両方のファイルがメインターゲットに追加され、 Copy Bundle Resources に追加:

  1. server_keys_message_hosted.json: Accertifyから提供される公開暗号化キーファイル。
  2. InMobile.plist: マーチャント詳細を含むプロパティリストファイル:
    • accountID (String): アカウントGUID
    • registrationURL (String): InMobile登録エンドポイント
    • logURL (String): InMobileログエンドポイント
    • serverKeyData (String): server_keys_message_hosted.json

: 経由での直接呼び出し generateFraudId

コール deunaSDK.generateFraudId 契約済みプロバイダーのパラメータを含む:

Swift
deunaSDK.generateFraudId(params: [
  "RISKIFIED": [
    "storeDomain": "yourdomain.com"
  ],
  "CYBERSOURCE": [
    "orgId": "your_org_id",
    "merchantId": "your_merchant_id"
  ],
  "MERCADOPAGO": [:],
  "ACCERTIFY": [:]
]) { fraudId in
  // fraudId is a Base64-encoded JSON string, or nil if providers failed or none configured
  guard let fraudId = fraudId else { return }
  print("Base64 Fraud ID:", fraudId)
}

: を渡す fraudCredentials をウィジェットに直接渡す

ウィジェットを起動する際(initPaymentWidget, PaymentWidgetConfigurationなど)、設定を fraudCredentialsに直接渡すことができます。SDKは購入時に内部で不正IDを生成します:

Swift
deunaSDK.initPaymentWidget(
  orderToken: orderToken,
  callbacks: callbacks,
  fraudCredentials: [
    "RISKIFIED": [
      "storeDomain": "yourdomain.com"
    ],
    "CYBERSOURCE": [
      "orgId": "your_org_id",
      "merchantId": "your_merchant_id"
    ],
    "MERCADOPAGO": [:]
  ]
)

: 動作に関する注意点

  • ゼロ・ブラウト&クラッシュ・セーフ: プロバイダーが辞書リクエストに含まれていても、そのフレームワークまたはサブスペックがリンクされていない場合、SDKは例外をスローしたりクラッシュしたりせずに安全に無視します。
  • : 並列実行: リクエストされたプロバイダーはバックグラウンドスレッドで同時にプロファイリングされます。
  • フォールバック動作: 有効なプロバイダーが設定されていないか、デバイスで利用できない場合、完了ハンドラーは nil.

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

コールバック / メソッドモーダル埋め込み説明
onSuccess✅✅支払いまたはカード保管操作が正常に完了しました。注文または認証情報ペイロードを受け取ります。呼び出し deunaSDK.close() (モーダル)または deunaSDK.dispose() (埋め込み)。
onError✅✅初期化または支払い処理中にエラーが発生しました。型指定された PaymentsError または ElementsError.
onClosed✅❌モーダルが閉じました。受信します CloseAction.userAction (手動で閉じられた)または CloseAction.systemAction (経由でクローズ) close()).
onPaymentProcessing✅✅顧客が支払いをタップし、支払い処理が開始されたときにトリガーされます。ボタンを無効化し、プログレススピナーを表示するために使用します。
onCardBinDetected✅✅カードBINが検出またはクリアされたときにトリガーされます(nil お客様が番号を削除したときに返されます)。フランチャイズ割引に使用します。
onInstallmentSelected✅✅顧客が分割払いを選択したときにトリガーされます(nil 一括払いのときに返されます)。
onEventDispatch✅✅すべての基盤となる CheckoutEvent または ElementsEvent データペイロード付きの発生。
close()✅❌アクティブなモーダル表示を閉じながら、SDKインスタンスを保持します。
dispose()❌✅ビュー階層がアンマウントされるときに、埋め込みコントローラーとWebViewを解放します。

エラーの処理(onError)

検査 error.type 初期化失敗と処理拒否を区別するために:

Swift
onError: { error in
  switch error.type {
  case .initializationFailed:
    // Widget failed to load; close presentation and notify user
    deunaSDK.close()
    showToast("Payment service temporarily unavailable")
  case .paymentError:
    // Transaction declined or processor error
    showRetry(error)
  @unknown default:
    showGenericError(error)
  }
}

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

参照 WalletsScreen.swift ネイティブのApple Pay用 EmbeddedScreen.swift および、SwiftUIライフサイクルのための設定。

このセクションで