これはSwift向けの公式Dodo Payments iOSチェックアウト SDKです。ネイティブブラウザビューでDodoのホスト型チェックアウトを開き、型付きの結果を返します。
Checkout Sessions API
バックエンドから、このSDKが開くcheckout_urlを作成します。
Mobile Integration Guide
これがモバイル決済フロー全体の中でどのように機能するかを確認します。
SFSafariViewControllerで開き、API keyを保持せず、Dodo APIを直接呼び出すこともありません。チェックアウトのロジックはすべてブラウザで実行され、SDKはビューのライフサイクルを管理し、return URLを取得するだけです。
iOS 16以降、Swift 6が必要です。
インストール
1
Add the Package
Xcodeで File → Add Package Dependencies に移動し、次を入力します。バージョン1.0.0以降を選択します。または、
Package.swiftに追加します。Package.swift
2
Register a Callback URL Scheme
アプリは、チェックアウトからのreturn URLを受け取るためにURL schemeを登録する必要があります。これをXcodeの Info → URL Types UIから追加することもできます。
Info.plistに追加します。Info.plist
使用方法
Return URLの転送
SFSafariViewControllerには、自身のreturn URLを捕捉するプロセス内の方法がありません。アプリで受信したURLをSDKに転送する必要があります。
- SwiftUI
- SceneDelegate
ここではすべてのURLを安全に転送できます。
handleOpenURLは、登録済みのreturnUrlに一致するURLに対してのみ動作し、それ以外の場合はfalseを返します。結果の意味
CheckoutStatus
必須
succeeded、failed、cancelled、pending、expiredのいずれかです。String?
return URLに含まれている場合に設定されます。UIに表示しますが、アクセスの許可には使用しないでください。詳しくは以下の「支払いの確認」を参照してください。
String?
subscription checkoutの場合に設定されます。
[String]?
チェックアウトにlicense key productsが含まれている場合に設定されます。
String?
チェックアウトでemailが取得された場合に設定されます。
[String: String]
return URLのすべてのquery parameterをそのまま保持します。
支払いの確認
Webhooks
支払いが成功したとき、またはsubscriptionが有効になったとき、Dodo Paymentsはバックエンドを呼び出します。
Get Payment Detail
secret keyを使用して
paymentIdを検索し、そのstatusを直接確認します。result.statusだけで許可してはいけません。
外観のカスタマイズ
シートの閉じるボタン、表示スタイル、カラースキームをcustomization の start(...) でカスタマイズできます。すべてのフィールドはオプションです。省略すると、customization は iOS のデフォルトの SFSafariViewController 外観を使用します。
DismissButtonStyle
閉じるボタンのラベルまたはアイコン:
done、close、または cancel。PresentationStyle
pageSheet はスワイプで閉じるカードとして表示されます。fullScreen は画面全体を覆います。Bool
スクロール時にツールバーを折りたためるようにします。
presentationStyle が fullScreen の場合のみ表示されます。pageSheet は、この設定にかかわらずバーを固定したままにします。ColorScheme
デバイスのシステム設定にかかわらず、ライトまたはダークの外観を強制します:
system、light、または dark。エラー
start が CheckoutError をスローするのは、誤用またはプラットフォームの障害が発生した場合のみです。キャンセルまたは拒否された支払いは常に結果として返され、例外にはなりません。
invalidCheckoutUrl(INVALID_CHECKOUT_URL):有効なcheckout.dodopayments.comセッション URL ではありません。invalidReturnUrl(INVALID_RETURN_URL):有効な絶対 URL ではありません。alreadyInProgress(ALREADY_IN_PROGRESS):チェックアウトはすでに実行中です。platformError(PLATFORM_ERROR):予期しないプラットフォーム障害です。
放棄されたセッション
チェックアウトの途中でアプリが終了した場合は、次回の起動時にセッションを復元し、バックエンドと照合してください。
関連項目
Mobile Integration Guide
Android、React Native、Flutter でも同じコントラクトを使用します。
React Native SDK
iOS 上で同じ Swift コアをラップします。