PrimerKlarnaSDK 1.1.2

PrimerKlarnaSDK 1.1.2

Primer 维护。



  • Primer DX 团队

PrimerKlarnaSDK

Swift Platforms

Primer

描述

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,它包含

  1. func primerKlarnaViewDidLoad() - 当 KlarnaPaymentView 加载并可供用户进一步交互时调用。

  2. 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,该委托包含以下功能

  1. func primerKlarnaWrapperInitialized() - 当KlarnaPaymentView初始化时调用

  2. func primerKlarnaWrapperResized(to newHeight: CGFloat) - 当KlarnaPaymentView更改其大小时调用,可用于布局更新

  3. func primerKlarnaWrapperLoaded() - 当KlarnaPaymentView加载时调用

  4. func primerKlarnaWrapperReviewLoaded() - 当KlarnaPaymentView状态下加载时调用

  5. func primerKlarnaWrapperAuthorized(approved: Bool, authToken: String?, finalizeRequired: Bool) - 当支付会话被授权时调用

  6. func primerKlarnaWrapperReauthorized(approved: Bool, authToken: String?) - 当支付会话重新授权时调用

  7. func primerKlarnaWrapperFinalized(approved: Bool, authToken: String?) - 当支付会话最终确定时调用

  8. func primerKlarnaWrapperFailed(with error: PrimerKlarnaError) - 在支付过程中发生任何错误时调用

如何构建PrimerKlarnaSDK的新版本

步骤

  1. 打开Xcode项目 Framework/PrimerKlarnaSDK.xcodeproj

  2. 如果您需要更新依赖项和/或在源代码中做出更改

  3. 创建新的通用框架(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

依赖项