EasyPurchase
该包的描述。版本 v1.0.0
EasyPurchase 是一个简单且易于使用的框架,用于处理 iOS 设备上的应用内购买,它是使用 Apple 的 Storekit 框架开发的。
功能
- 适用于 iOS 11+:提供从 App Store 发起的内购支持(兼容 iOS 11 及以后版本)。
- 用户友好的 API:享受易于理解的基于块的 API。
- 产品验证支持:轻松验证您在 App Store Connect 中设置的产品。
- 购买支持:处理可消耗和非可消耗的应用内购买。
- 订阅支持:管理免费、自动续订和非续订的订阅。
要求
如果您维护或开发的应用将最低 iOS 版本设置为 11.0,则所有功能都应可用。因此,仅需要满足 iOS 设备的要求。
- iOS 11.0
安装
您有几种方式可以在项目中安装 EasyPurchase,其中首选和推荐的方法是 Swift Package Manager、CocoaPods 和 Carthage 集成。
无论您选择哪种方法,确保将项目导入到您打算使用的任何地方
import EasyPurchase
Swift Package Manager
Swift Package Manager(SPM)是一个用于自动化 Swift 代码分布的工具,它无缝集成到 Xcode 和 Swift 编译器中。它是 EasyPurchase 推荐的安装方法。使用 SPM,EasyPurchase 的更新立即提供给您的项目。SPM 还直接集成到 Xcode。
如果您使用的是 Xcode 11 或更高版本,按照以下步骤将 EasyPurchase 添加为依赖关系
- 点击 文件。
- 选择 Swift 包。
- 选择 添加包依赖...。
- 指定 EasyPurchase 的 Git URL:
https://github.com/BJIT-RnD/EasyPurchase.git
CocoaPods
EasyPurchase 可以作为 CocoaPod 安装,并构建为一个 Swift 框架。
要安装,请在 Podfile 中包含以下内容。
use_frameworks!
pod 'EasyPurchase', '~> 1.0'
应用启动
完成交易
为了确保您的应用始终接收到所有支付队列通知,添加您的应用观察者是非常重要的。这样,每次应用启动时,您的应用都会持续监听这些通知。EasyPurchase 通过在应用启动时调用 completeTransaction()
函数来简化此过程。
// This method is called when the app finishes launching.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
EasyPurchase.completeTransactions { purchases in
for purchase in purchases {
switch purchase.transaction.transactionState {
case .purchased, .restored:
if purchase.needsFinishTransaction {
EasyPurchase.finishTransaction(purchase.transaction)
}
case .failed, .purchasing, .deferred:
break
@unknown default:
break
}
}
}
return true
}
如果在初始化过程中有挂起的交易,则 completeTransactions()
函数将通过完成块报告它们。这使您的应用能够根据需要更新其状态和用户界面。
重要的是要强调,您应该在代码中仅在 一次 调用 completeTransactions()
,具体来说是在应用 (:didFinishLaunchingWithOptions:)
方法中。
购买
获取产品
var productRequest: InAppProductRequest?
let products = "productIdentifier"
productRequest = EasyPurchase.fetchProducts(Set(products!)) { productInfo in
if productInfo.error != nil {
completion(nil, productInfo.error)
} else {
if let retrievedProducts = productInfo.retrievedProducts {
completion(Array(retrievedProducts), nil)
} else {
// invalidProductIDs
}
}
}
productRequest?.start()
购买产品
EasyPurchase.purchaseProduct(.nonConsumable, product: productArray[indexPath.row], quantity: 1) { [weak self] purchaseResult in
guard let self = self else { return }
switch purchaseResult {
case .success(let purchase):
alertTitle = "Successful!"
alertMessage = "Successfully purchased: \(purchase.product.localizedTitle)"
case .failure(let error):
if error.code == .paymentCancelled {
alertTitle = "Oops!"
alertMessage = "Your purchase process is cancelled!"
} else {
alertTitle = "Failed!"
alertMessage = error.localizedDescription
}
}
}
恢复购买
本部分解释了使用 restorePurchases()
方法恢复以前的交易。当此方法成功执行时,无论这些交易是否已过期,它都将为您提供所有非消耗性购买和所有自动续订的订阅购买。
EasyPurchase.restorePurchases(atomically: true) { results in
print(results, "results")
for purchase in results.restoredProductsSuccess {
print("purchase", purchase)
}
}
示例实现
该项目包含iOS 演示应用,作为如何利用 EasyPurchase 的示例。重要的是要理解,这些演示应用中预先注册的 In-app 购买仅用于演示和教学目的。值得注意的是,由于 iTunes Connect 有可能使它们失效,其功能可能不可靠。
注意。
EasyPurchase 不会在本地层面保留 In-app 购买数据。管理和存储这些数据的责任落在使用 EasyPurchase 的客户端或开发人员身上。他们可以根据自己的喜好选择存储解决方案,包括 NSUserDefaults、CoreData 或 Keychain 等选项。换句话说,EasyPurchase 不处理 In-app 购买信息的本地存储;这项任务留给了客户端的自由裁量,使他们可以选择最适合其特定需求的方法。