TPInAppReceipt
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。