SwiftyStoreKit 是一个专为 iOS 和 macOS 开发的轻量级应用内购买(IAP)库,旨在简化与 Apple 的 StoreKit 框架的交互。它提供了一组易用的 API,使开发者能够轻松管理应用内的购买、订阅、收据验证以及购买恢复操作。
核心功能
- 
产品信息查询:
- 可以通过 
retrieveProductsInfo方法查询在 App Store Connect 上配置的产品(包括订阅和一次性购买)信息,如价格、产品描述等。 
 - 可以通过 
 - 
购买产品:
SwiftyStoreKit提供了简单的 API 来执行购买流程。开发者可以通过purchaseProduct方法触发购买行为,处理成功或失败的回调。- 支持消耗型产品、非消耗型产品(如永久解锁)以及自动续订订阅。
 
 - 
收据验证:
- 支持本地和远程收据验证。
 - 可以选择使用 Apple 提供的验证服务器进行远程收据验证,或者在本地解析收据以获取购买详情。
 - 支持验证订阅的有效期以及过期日期,适用于应用内订阅的管理。
 
 - 
恢复购买:
- 通过 
restorePurchases方法,可以让用户恢复他们之前的购买记录,适用于非消耗型产品或订阅恢复。 
 - 通过 
 - 
购买状态监听:
- 可以监听未完成的交易并进行处理,确保应用不会丢失任何购买记录。
 
 - 
支持订阅的状态检查:
- 支持通过收据验证来检查用户订阅的状态,包括订阅是否已经到期。
 
 
SwiftyStoreKit 的特点
- 
简洁易用:
SwiftyStoreKit设计得非常简单直观,它封装了繁琐的StoreKitAPI,使应用内支付流程变得更容易管理。通过简单的代码,你可以查询产品、发起购买、处理交易,以及进行收据验证。
 - 
支持 Swift 语言:
- 作为纯 Swift 库,
SwiftyStoreKit非常适合 Swift 项目,API 风格也与 Swift 开发习惯相符。 
 - 作为纯 Swift 库,
 - 
灵活的收据验证:
- 既可以在本地进行验证,也可以通过远程的 Apple 服务器进行验证,帮助开发者灵活处理付费逻辑。
 
 - 
良好的社区支持和维护:
SwiftyStoreKit拥有较为活跃的 GitHub 社区,问题修复和新功能的开发响应比较及时,文档也相对完善。
 
使用场景
- 应用内单次购买:适用于销售一次性虚拟物品或永久解锁的功能。
 - 订阅管理:非常适合用于处理自动续订和非自动续订的订阅服务。
 - 购买恢复:提供恢复之前购买的功能,比如用户在更换设备后重新下载应用。
 
示例代码
import SwiftyStoreKit
// 查询产品信息
SwiftyStoreKit.retrieveProductsInfo(["com.example.productid"]) { result in
    for product in result.retrievedProducts {
        print("Product: \(product.localizedDescription), price: \(product.localizedPrice)")
    }
    for invalidProduct in result.invalidProductIDs {
        print("Invalid product identifier: \(invalidProduct)")
    }
    print("Error: \(String(describing: result.error))")
}
// 购买产品
SwiftyStoreKit.purchaseProduct("com.example.productid") { result in
    switch result {
    case .success(let purchase):
        print("Purchase Success: \(purchase.productId)")
    case .error(let error):
        print("Purchase Failed: \(error.localizedDescription)")
    }
}
// 恢复购买
SwiftyStoreKit.restorePurchases { result in
    for purchase in result.restoredPurchases {
        print("Restored purchase: \(purchase.productId)")
    }
    print("Restore failed: \(String(describing: result.error))")
}
// 本地收据验证
SwiftyStoreKit.verifyReceipt(using: AppleReceiptValidator(service: .production)) { result in
    switch result {
    case .success(let receipt):
        print("Receipt verified: \(receipt)")
    case .error(let error):
        print("Receipt verification failed: \(error.localizedDescription)")
    }
}
SwiftyStoreKit 的局限性
- 
只支持 Apple 平台:
SwiftyStoreKit只适用于 iOS 和 macOS,不支持 Android 平台。如果你的应用需要跨平台支持,可能需要使用像 RevenueCat 这样的服务。 - 
收据验证需要自己处理:虽然
SwiftyStoreKit支持收据验证,但你需要自己编写代码进行处理,特别是当需要进行复杂的服务器端验证时。 
结论
SwiftyStoreKit 是一个非常强大的工具,适合不想手动处理复杂 StoreKit API 的开发者。对于想要快速实现应用内购买和订阅功能的小型应用,它提供了非常简洁和直观的解决方案。特别是对于使用 Swift 的开发者,它的设计使集成更加顺畅。