Swift용 공식 Dodo Payments iOS checkout SDK입니다. 네이티브 브라우저 뷰에서 Dodo의 호스팅 checkout을 열고 타입이 지정된 결과를 반환합니다.
Checkout Sessions API
이 SDK가 열 checkout_url을 backend에서 생성합니다.
Mobile Integration Guide
전체 모바일 결제 흐름에서 어떻게 구성되는지 확인하세요.
SFSafariViewController에서 열고 API key를 보유하지 않으며 Dodo API를 직접 호출하지 않습니다. 모든 checkout 로직은 브라우저에서 실행되고, 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
checkout에서 반환되는 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에만 작동하며, 그 외의 URL에는 false를 반환합니다.결과의 의미
CheckoutStatus
필수
succeeded, failed, cancelled, pending, expired 중 하나입니다.String?
return URL에 해당 값이 포함된 경우 설정됩니다. UI에 표시하되 액세스 권한을 부여하는 데 사용하지 마세요. 아래의 결제 확인을 참조하세요.
String?
subscription checkout에 대해 설정됩니다.
[String]?
checkout에 license key 제품이 포함된 경우 설정됩니다.
String?
checkout에서 이메일을 수집하는 경우 설정됩니다.
[String: String]
return URL의 모든 query parameter를 있는 그대로 포함합니다.
결제 확인
Webhooks
결제가 성공하거나 subscription이 활성화되면 Dodo Payments가 backend를 호출합니다.
Get Payment Detail
secret key를 사용하여
paymentId를 조회하고 상태를 직접 확인합니다.result.status만으로 부여해서는 안 됩니다.
Appearance Customization
시트의 닫기 버튼, 표시 스타일 및 색 구성표를customization을 통해 start(...)에서 사용자 지정할 수 있습니다. 모든 필드는 선택 사항이며, customization을 생략하면 iOS의 기본 SFSafariViewController 모양이 사용됩니다.
DismissButtonStyle
닫기 버튼에 표시할 레이블 또는 아이콘:
done, close 또는 cancel.PresentationStyle
pageSheet은 스와이프하여 닫을 수 있는 카드로 표시되고, fullScreen은 전체 화면을 덮습니다.Bool
스크롤할 때 툴바가 접히도록 합니다.
presentationStyle이 fullScreen인 경우에만 표시되며, pageSheet은 이 설정과 관계없이 바를 고정된 상태로 유지합니다.ColorScheme
기기의 시스템 설정과 관계없이 라이트 또는 다크 모양을 강제합니다:
system, light 또는 dark.Errors
start은 오용 또는 플랫폼 오류가 발생한 경우에만 CheckoutError을 발생시킵니다. 결제가 취소되거나 거부된 경우는 항상 결과로 반환되며 예외가 아닙니다.
invalidCheckoutUrl(INVALID_CHECKOUT_URL): 유효한checkout.dodopayments.com세션 URL이 아닙니다.invalidReturnUrl(INVALID_RETURN_URL): 유효한 절대 URL이 아닙니다.alreadyInProgress(ALREADY_IN_PROGRESS): checkout이 이미 실행 중입니다.platformError(PLATFORM_ERROR): 예기치 않은 플랫폼 오류입니다.
Abandoned Sessions
checkout 도중 앱이 종료된 경우 다음에 앱을 시작할 때 세션을 복구하고 백엔드와 대조하여 처리 상태를 일치시키세요.
Related
Mobile Integration Guide
Android, React Native 및 Flutter에서도 동일한 계약을 제공합니다.
React Native SDK
iOS에서 동일한 Swift 코어를 래핑합니다.