TPInAppReceipt 3.4.1

TPInAppReceipt 3.4.1

测试已测试
Lang语言 SwiftSwift
许可证 MIT
Released最后发布2024年4月
SPM支持 SPM

Pavel T 维护。



  • 作者
  • tikhop

TPInAppReceipt

Swift CocoaPods Compatible Swift Package Manager compatible Platform GitHub license

TPInAppReceipt 是一个轻量级的纯 Swift 库,用于本地读取和验证苹果 In App Purchase 收据。

特性

  • 读取所有 In-App 收据属性
  • 验证 In-App Purchase 收据(签名、包版本和标识符、哈希值)
  • 确定是否具有资格获得入门优惠
  • 与 StoreKitTest 一起使用
  • 在 Objective-C 项目中使用

安装

注意:如果您希望在 Objective-C 项目中使用 TPInAppReceipt,请遵循以下指南 TPInAppReceipt 在 Objective-C 项目中

CocoaPods

要使用 CocoaPods 将 TPInAppReceipt 集成到您的项目,请在您的 Podfile 中指定它

platform :ios, '9.0'

target 'YOUR_TARGET' do
  use_frameworks!

  pod 'TPInAppReceipt'
end

然后,运行以下命令

$ pod install

在任何您想使用 TPInAppReceipt 的 Swift 文件中,使用 import TPInAppReceipt 语句导入框架。

Swift 包管理器

要使用 Apple 的 Swift 包管理器进行集成,将以下内容作为依赖项添加到您的 Package.swift 文件中

.package(url: "https://github.com/tikhop/TPInAppReceipt.git", .upToNextMajor(from: "3.0.0"))

然后,指定 "TPInAppReceipt" 作为您希望使用 TPInAppReceipt 的目标的依赖项。

最后,运行以下命令

swift package update

需求

  • iOS 10.0+ / macOS 10.11+
  • Swift 5.3+

使用方法

处理收据

InAppReceipt 对象封装了有关收据及其相关购买的信息。要验证内购收据,您必须创建一个 InAppReceipt 对象。

初始化收据

要创建 InAppReceipt 对象,您可以提供原始收据数据或初始化本地收据。

do {
  /// Initialize receipt
  let receipt = try InAppReceipt.localReceipt() 
  // let receipt = try InAppReceipt() // Returns local receipt 
  
  // let receiptData: Data = ...
  // let receipt = try InAppReceipt.receipt(from: receiptData)
  
} catch {
  print(error)
}

验证收据

TPInAppReceipt 提供了各种方便的方法来验证内购收据。

/// Verify hash 
try? receipt.verifyHash()

/// Verify bundle identifier
try? receipt.verifyBundleIdentifier()

/// Verify bundle version
try? receipt.verifyBundleVersion()

/// Verify signature
try? receipt.verifySignature()

/// Validate all at once 
do {
  try receipt.verify()
} catch IARError.validationFailed(reason: .hashValidation) {
  // Do smth
} catch IARError.validationFailed(reason: .bundleIdentifierVerification) {
  // Do smth
} catch IARError.validationFailed(reason: .signatureValidation) {
  // Do smth
} catch {
  // Do smth
}

注意:苹果建议在应用启动后立即执行收据验证。为了增加安全性,您可以在应用程序运行期间定期重复此检查。注意:如果在iOS中验证失败,请尝试首先刷新收据。

确定 Eligibility for Introductory Offer

如果您的应用为自动续订订阅提供入门级定价,则需要显示正确的价格,无论是入门级价格还是常规价格。
提供确定入门级价格资质的接口。最简单的方法是提供一个属于同一订阅组的商品标识符的 Set

// Check whether user is eligible for any products within the same subscription group 
var isEligible = receipt.isEligibleForIntroductoryOffer(for: ["com.test.product.bronze", "com.test.product.silver", "com.test.product.gold"])

注意:要确定用户是否符合入门优惠条件,您必须先初始化和验证收据,然后再检查资质。

读取收据

/// Initialize receipt
let receipt = try! InAppReceipt.localReceipt() 

/// Base64 Encoded Receipt
let base64Receipt = receipt.base64
  
/// Check whether receipt contains any purchases
let hasPurchases = receipt.hasPurchases

/// All auto renewable `InAppPurchase`s,
let purchases: [InAppPurchase] = receipt.autoRenewablePurchases 

/// all ACTIVE auto renewable `InAppPurchase`s,
let activePurchases: [InAppPurchase] = receipt.activeAutoRenewableSubscriptionPurchases 

有价值的函数

// Retrieve Original TransactionIdentifier for Product Name
receipt.originalTransactionIdentifier(ofProductIdentifier: subscriptionName)

// Retrieve Active Auto Renewable Subscription's Purchases for Product Name and Specific Date
receipt.activeAutoRenewableSubscriptionPurchases(ofProductIdentifier: subscriptionName, forDate: Date())

// Retrieve All Purchases for Product Name
receipt.purchases(ofProductIdentifier: subscriptionName)

刷新/请求收据

当需要时,使用此方法确保您正在处理的收据是最新的。

InAppReceipt.refresh { (error) in
  if let err = error
  {
    print(err)
  } else {
    initializeReceipt()
  }
}

关键阅读

协议

TPInAppReceipt遵循MIT协议。更多信息请见LICENSE