PrimerKlarnaSDK
描述
PrimerKlarnaSDK 是 KlarnaMobileSDK 的包装器,公开其功能源。它可以作为单独的模块用于PrimerSDK中。我们的目标是提供二进制通用框架作为Swift Package和Cocoapod,以进一步集成到主Primer SDK中。
该仓库包含
- 框架
- PrimerKlarnaSDK Xcode项目。该项目包含围绕KlarnaMobileSDK的包装器实现,并创建框架。
- 脚本
- prepare.sh - 执行一些与删除旧xcframework相关的准备工作
- archive.sh - 对iOS和模拟器进行框架项目的存档
- build.sh - 使用前一步的存档创建xcframework
- finalize.sh - 删除存档,删除包含旧xcframework的旧zip文件,并创建新一个
- make.sh - 按正确顺序调用之前描述的所有脚本
- KlarnaMobileSDK.xcframework - KlarnaMobileSDK的二进制通用框架
- PrimerKlarnaSDK.xcframework - PrimerKlarnaSDK的二进制通用框架
- XCFrameworks.zip - 包含 xcframework 的归档(用于 CocoaPod 集成所需)
框架组成
该框架包含 KlarnaMobileSDK 的包装类和协议的实现,它作为通用框架(xcframework)集成其中。
错误
如果在支付过程中发生任何错误,您将获得一个名为 PrimerKlarnaError
的对象。它实现了 PrimerKlarnaErrorProtocol
并包含以下属性
public protocol PrimerKlarnaErrorProtocol: CustomNSError, LocalizedError {
var errorId: String { get }
var exposedError: Error { get }
var info: [String: String]? { get }
var diagnosticsId: String { get }
}
使用这些信息可以获取发生错误的详细信息,并按特定方式处理它。
ViewController
该框架包含已经预先定义的 PrimerKlarnaViewController
,其中包含用于控制支付过程的继续按钮和 KlarnaPaymentView
,这是 Klarna 提供的 UI 组件,作为 KlarnaMobileSDK
的一部分提供。它负责表示用户在支付过程中需要经历的不同阶段。
为了初始化 PrimerKlarnaViewController
对象,您需要做以下操作
let viewController = PrimerKlarnaViewController(
delegate: self,
paymentCategory: .payNow,
clientToken: "CLIENT_TOKEN",
urlScheme: "URL_SCHEME"
)
为了从 PrimerKlarnaViewController
获取回调,您可以使用 PrimerKlarnaViewControllerDelegate
,它包含
-
func primerKlarnaViewDidLoad()
- 当KlarnaPaymentView
加载并可供用户进一步交互时调用。 -
func primerKlarnaPaymentSessionCompleted(authorizationToken: String?, error: PrimerKlarnaError?)
- 当支付会话完成时调用,无论是成功还是失败。
下一个参数是 paymentCategory
。它应该是以下枚举中的一个类型
public enum KlarnaPaymentCategory: String {
case payNow = "pay_now"
case payLater = "pay_later"
case payOverTime = "pay_over_time"
}
之后,您需要传递客户端令牌,这是 Klarna 支付会话的令牌,可以从 Primer 后端检索。
最后一个参数是 urlScheme
,它是可选的。它应该是您应用的自定义URL方案 CFBundleURLSchemes
,从外部应用返回所必需的。
提供者
Klarna支付集成的另一种选项,该选项存在于框架中,是PrimerKlarnaProvider
。如果您想在Klarna支付过程中完全控制用户界面和用户体验并在您的应用中处理它,则应使用此方法。
PrimerKlarnaProvider
实现PrimerKlarnaProviding
协议,该协议包含以下功能和属性
public protocol PrimerKlarnaProviding: AnyObject {
// MARK: - Properties
/**
Can be used for getting access to KlarnaPaymentView for representation it inside the app
*/
var paymentView: KlarnaPaymentView? { get }
// MARK: - Funcs
/**
Create KlarnaPaymentView using predefined payment category and setting up Klarna payment events listener
*/
func createPaymentView()
/**
Initializes payment view using client token and url schema if it is available
*/
func initializePaymentView()
/**
Gives ability to load payment review UI inside KlarnaPaymentView if it is required
*/
func loadPaymentReview()
/**
Loads payment view (json data can be added if it is required)
*/
func loadPaymentView(jsonData: String?)
/**
Removes payment view from superview and deinitializes it
*/
func removePaymentView()
/**
Authorizes payment session and gives ability to enable automatic finalization for payment
*/
func authorize(autoFinalize: Bool, jsonData: String?)
/**
Gives ability to reauthorize payment session if it is required
*/
func reauthorize(jsonData: String?)
/**
FInalizes payment session if it was not setup as the session to be automatically finalized on authorization stage
*/
func finalise(jsonData: String?)
}
要创建PrimerKlarnaProvider
实例,您需要添加以下代码
let provider: PrimerKlarnaProviding = PrimerKlarnaProvider(
clientToken: "CLIENT_TOKEN",
paymentCategory: "PAYMENT_CATEGORY",
urlScheme: "URL_SCHEME",
delegate: self
)
客户端令牌应从Primer服务器获取,以及支付类别列表。在用户选择适当的类别后,您可以创建一个作为PrimerKlarnaProviding
协议对象的PrimerKlarnaProvider
实例。URL模式是可选的。
要接收支付会话的回调,您需要实现PrimerKlarnaProviderDelegate
,该委托包含以下功能
-
func primerKlarnaWrapperInitialized()
- 当KlarnaPaymentView
初始化时调用 -
func primerKlarnaWrapperResized(to newHeight: CGFloat)
- 当KlarnaPaymentView
更改其大小时调用,可用于布局更新 -
func primerKlarnaWrapperLoaded()
- 当KlarnaPaymentView
加载时调用 -
func primerKlarnaWrapperReviewLoaded()
- 当KlarnaPaymentView
在状态下加载时调用
-
func primerKlarnaWrapperAuthorized(approved: Bool, authToken: String?, finalizeRequired: Bool)
- 当支付会话被授权时调用 -
func primerKlarnaWrapperReauthorized(approved: Bool, authToken: String?)
- 当支付会话重新授权时调用 -
func primerKlarnaWrapperFinalized(approved: Bool, authToken: String?)
- 当支付会话最终确定时调用 -
func primerKlarnaWrapperFailed(with error: PrimerKlarnaError)
- 在支付过程中发生任何错误时调用
如何构建PrimerKlarnaSDK的新版本
步骤
-
打开Xcode项目
Framework/PrimerKlarnaSDK.xcodeproj
-
如果您需要更新依赖项和/或在源代码中做出更改
-
创建新的通用框架(xcframework)。运行终端并执行脚本
cd Scripts
sh make.sh
结果,将在root
文件夹中构建并放置PrimerKlarnaSDK.xcframework
。此外,脚本将生成新的XCFrameworks.zip
,这是CocoaPod所需的。
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问他们的网站。要使用 CocoaPods 在 Xcode 项目中集成 Alamofire,请在您的 Podfile
中指定它
pod 'PrimerKlarnaSDK'
Swift 包管理器
Swift Package Manager 是一个用于自动化 Swift 代码分发的工具,旨在与 swift
编译器集成。
一旦您设置好 Swift 包,添加 Alamofire 作为依赖项只需将其添加到 Package.swift
中的 dependencies
值即可。
dependencies: [
.package(url: "https://github.com/primer-io/primer-klarna-sdk-ios.git", .upToNextMajor(from: "1.0.4"))
]
要求
平台 | 最低 Swift 版本 |
---|---|
iOS 14.0+ | 5.5 |
依赖项
- KlarnaMobileSDK(作为xcframework包含) https://docs.klarna.com/mobile-sdk/ios/get-started/