यह पेज Swift के लिए official Dodo Payments iOS checkout SDK को कवर करता है। यह Dodo Payments hosted checkout को native browser view में खोलता है और typed result लौटाता है।
Checkout Sessions API
अपने backend से वह
checkout_url बनाएँ जिसे यह SDK खोलता है।Mobile Integration Guide
देखें कि यह SDK पूरे mobile payment flow में कैसे फिट होता है।
SFSafariViewController में खोलता है और customer के checkout पूरा करने या छोड़ने पर typed CheckoutResult लौटाता है। इसमें कोई API key नहीं होती और इसमें networking code भी नहीं होता, इसलिए यह कभी Dodo Payments API को कॉल नहीं करता। Checkout browser view में चलता है। SDK उस view को प्रस्तुत और dismiss करता है तथा return URL से result पढ़ता है।
आवश्यकताएँ: iOS 16 या बाद का संस्करण और Swift 6.2 या बाद का संस्करण (package swift-tools-version: 6.2 घोषित करता है)। SDK की कोई third-party dependencies नहीं हैं।
इंस्टॉलेशन
1
Add the Package
Xcode में File → Add Package Dependencies पर जाएँ और package URL दर्ज करें:संस्करण 1.1.0 या बाद का चुनें। Appearance customization के लिए 1.1.0 आवश्यक है।इसके बजाय package को library product का नाम
Package.swift में जोड़ने के लिए यह dependency जोड़ें:Package.swift
DodoCheckout है।2
Register a Callback URL Scheme
iOS को checkout का return URL आपके ऐप पर वापस route करने देने के लिए URL scheme register करें। अपने आप Xcode में Info → URL Types के अंतर्गत भी URL type जोड़ सकते हैं।इस scheme का उपयोग उस
Info.plist में URL type जोड़ें:Info.plist
returnUrl में करें जिसे आप SDK को पास करते हैं, उदाहरण के लिए myapp://checkout/return, और backend द्वारा session बनाते समय checkout session के return_url के रूप में वही URL सेट करें। SDK return URL का मिलान scheme, host और path के आधार पर करता है। URL को किसी वास्तविक page को load करने की आवश्यकता नहीं है।उपयोग
DodoCheckout.start एक async function है जो main actor पर चलता है। अपने backend से लौटाए गए checkout_url से बनाए गए URL के रूप में checkoutUrl पास करें:
onEvent को .opened, .returnReceived और .closed events प्राप्त होते हैं। उनके name values क्रमशः checkout.opened, checkout.return_received और checkout.closed हैं। Events का उपयोग केवल logging के लिए करें, outcome तय करने के लिए कभी नहीं।
Return URL को Forward करना
SFSafariViewController अपने return URL को स्वयं catch नहीं कर सकता, इसलिए iOS इसके बजाय URL को आपके ऐप में खोलता है। प्रत्येक incoming URL को DodoCheckout.handleOpenURL(_:) पर forward करें। बिना scenes वाले ऐप में इसे अपने app delegate के application(_:open:options:) से कॉल करें।
- SwiftUI
- SceneDelegate
आप प्रत्येक URL को forward कर सकते हैं।
handleOpenURL केवल उस URL पर कार्य करता है जो चल रहे checkout के returnUrl से match करता है और उसके लिए true लौटाता है। किसी अन्य URL के लिए यह false लौटाता है, इसलिए उस URL को स्वयं handle करें।Result का अर्थ
SDK return URL के query parameters सेCheckoutResult बनाता है।
CheckoutStatus
आवश्यक
पाँच values में से एक:
succeeded: return URL मेंstatus=succeeded(one-time payment) याstatus=active(subscription) है।failed: payment अस्वीकार कर दिया गया (status=failed)।cancelled: return URL आने से पहले customer ने sheet dismiss कर दी। SDK को outcome का पता नहीं है और payment सफल हो सकता है, इसलिए failure screen न दिखाएँ। इसके बजाय abandoned session को reconcile करें।pending: payment बाद में settle होता है (status=processingया कोई भीrequires_*value), याstatusparameter missing या unrecognized था। इसेcancelledकी तरह reconcile करें।expired: checkout session expire हो गया (status=expired)।
String?
payment_id query parameter, जब return URL में शामिल हो। इसे UI में दिखाएँ, लेकिन access देने के लिए इसका उपयोग न करें। Verify the Payment देखें।String?
subscription_id query parameter। Subscription checkouts के लिए set होता है।[String]?
license_key query parameter। Checkout में license key products शामिल होने पर set होता है।String?
email query parameter। Checkout द्वारा email address capture किए जाने पर set होता है।[String: String]
Return URL का प्रत्येक query parameter, verbatim।
Payment सत्यापित करें
Webhooks
Payment सफल होने या subscription सक्रिय होने पर Dodo Payments आपके backend को कॉल करता है।
Get Payment Detail
इसकी स्थिति जाँचने के लिए अपनी secret key से
paymentId lookup करें।result.status पर निर्भर न रहें।
Appearance Customization
Sheet के dismiss button, presentation style और color scheme को बदलने के लिएBrowserCustomization को customization के रूप में start(...) में पास करें। प्रत्येक field optional है। nil field के लिए SDK उस option को set नहीं करता और iOS अपना default लागू करता है। अपवाद presentationStyle है, जहाँ nil का अर्थ pageSheet है।
DismissButtonStyle?
Dismiss button की style:
done, close या cancel। इसे label या icon के रूप में render करना है या नहीं, यह iOS तय करता है।PresentationStyle?
pageSheet (default) एक card प्रस्तुत करता है जिसे customer swipe down करके dismiss कर सकता है। fullScreen पूरी screen को cover करता है और इसमें dismiss gesture नहीं होता।Bool?
Page scroll होने पर toolbar को collapse होने देता है। इसका प्रभाव केवल तब दिखाई देता है जब
presentationStyle, fullScreen हो। pageSheet के साथ bars इस setting की परवाह किए बिना pinned रहते हैं।ColorScheme?
light या dark device की system setting की परवाह किए बिना उस appearance को force करता है। system system setting का पालन करता है। यह option केवल page के आसपास के native controls को theme करता है। Checkout page का अपना light या dark mode checkout session के customization.theme से आता है और इसके colors customization.theme_config से आते हैं।SFSafariViewController tint properties iOS 26 से deprecated हैं।
Errors
start केवल misuse या platform failure के लिए CheckoutError throw करता है। कारण error.code से पढ़ें। Customer द्वारा cancel करना या payment का decline होना हमेशा result होता है, thrown error नहीं।
invalidCheckoutUrl(INVALID_CHECKOUT_URL):checkoutUrl,checkout.dodopayments.comयाtest.checkout.dodopayments.comपर/session/से शुरू होने वाला valid checkout session URL नहीं है।invalidReturnUrl(INVALID_RETURN_URL):returnUrlscheme और host वाला absolute URL नहीं है।alreadyInProgress(ALREADY_IN_PROGRESS): एक अन्य checkout चल रहा है। एक समय में केवल एक checkout चल सकता है।platformError(PLATFORM_ERROR): unexpected platform failure, जैसे प्रस्तुत करने के लिए कोई view controller उपलब्ध न होना।
alreadyInProgress है: उस स्थिति में मिलने वाला record अभी चल रहे checkout का होता है।
Abandoned Sessions
Checkout प्रस्तुत करते समय SDK checkout session को record करता है और केवल तब record clear करता है जब checkout
succeeded, failed या expired के साथ समाप्त होता है। Checkout के दौरान ऐप बंद कर दिए जाने पर और cancelled या pending result के बाद record बना रहता है। अगले launch पर और प्रत्येक cancelled या pending result के बाद इसे जाँचें।abandoned.sessionId checkout session ID है, जो cks_ से शुरू होती है। abandoned.createdAt वह Date है जहाँ checkout शुरू हुआ था। आपका backend Get Checkout Session के माध्यम से session lookup कर सकता है, जो उसका payment_id और payment_status लौटाता है। जब तक payment final status तक नहीं पहुँचता, इसे failed नहीं बल्कि pending मानें।
संबंधित
Mobile Integration Guide
Android, React Native और Flutter के लिए यही contract।
React Native SDK
iOS पर इसी Swift core को wrap करता है।