SwiftyStoreKit 是一个专为 iOS 和 macOS 开发的轻量级应用内购买(IAP)库,旨在简化与 Apple 的 StoreKit 框架的交互。它提供了一组易用的 API,使开发者能够轻松管理应用内的购买、订阅、收据验证以及购买恢复操作。

核心功能

  1. 产品信息查询

    • 可以通过 retrieveProductsInfo 方法查询在 App Store Connect 上配置的产品(包括订阅和一次性购买)信息,如价格、产品描述等。
  2. 购买产品

    • SwiftyStoreKit 提供了简单的 API 来执行购买流程。开发者可以通过 purchaseProduct 方法触发购买行为,处理成功或失败的回调。
    • 支持消耗型产品、非消耗型产品(如永久解锁)以及自动续订订阅。
  3. 收据验证

    • 支持本地和远程收据验证。
    • 可以选择使用 Apple 提供的验证服务器进行远程收据验证,或者在本地解析收据以获取购买详情。
    • 支持验证订阅的有效期以及过期日期,适用于应用内订阅的管理。
  4. 恢复购买

    • 通过 restorePurchases 方法,可以让用户恢复他们之前的购买记录,适用于非消耗型产品或订阅恢复。
  5. 购买状态监听

    • 可以监听未完成的交易并进行处理,确保应用不会丢失任何购买记录。
  6. 支持订阅的状态检查

    • 支持通过收据验证来检查用户订阅的状态,包括订阅是否已经到期。

SwiftyStoreKit 的特点

  1. 简洁易用

    • SwiftyStoreKit 设计得非常简单直观,它封装了繁琐的 StoreKit API,使应用内支付流程变得更容易管理。通过简单的代码,你可以查询产品、发起购买、处理交易,以及进行收据验证。
  2. 支持 Swift 语言

    • 作为纯 Swift 库,SwiftyStoreKit 非常适合 Swift 项目,API 风格也与 Swift 开发习惯相符。
  3. 灵活的收据验证

    • 既可以在本地进行验证,也可以通过远程的 Apple 服务器进行验证,帮助开发者灵活处理付费逻辑。
  4. 良好的社区支持和维护

    • 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 的局限性

  1. 只支持 Apple 平台SwiftyStoreKit 只适用于 iOS 和 macOS,不支持 Android 平台。如果你的应用需要跨平台支持,可能需要使用像 RevenueCat 这样的服务。

  2. 收据验证需要自己处理:虽然 SwiftyStoreKit 支持收据验证,但你需要自己编写代码进行处理,特别是当需要进行复杂的服务器端验证时。

结论

SwiftyStoreKit 是一个非常强大的工具,适合不想手动处理复杂 StoreKit API 的开发者。对于想要快速实现应用内购买和订阅功能的小型应用,它提供了非常简洁和直观的解决方案。特别是对于使用 Swift 的开发者,它的设计使集成更加顺畅。