我正在尝试恢复应用内购买(非续订订阅),以防用户在新手机上安装该应用或在他的手机上重新安装该应用。我想使用方法获取应用内购买的原始购买日期
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
for transaction in queue.transactions{
let t : SKPaymentTransaction = transaction
let prodID = t.payment.productIdentifier as String
print("transaction finished",prodID)
if(prodID == "com.netvariant.FamousFaces.FullAccess"){
print(">>>>>>>>>>>>>", t.original?.transactionDate)
print(">>>>>>>>>>>>>", t.transactionDate)
defaults.set("Y", forKey: "adPurchase")
NotificationCenter.default.post(name: Notification.Name(rawValue: "removeAds"), object: nil)
print("working")
}
}
}
问题是在两种情况下都返回 nil 的交易日期。我在代码中遗漏了什么?这是处理恢复购买的最佳方式吗?
我想获取日期来计算用户的订阅期(1 个月)是否结束。恢复成功,但正如我在 nil 中提到的日期。
谢谢。
最佳答案
您可以使用 SwiftyStoreKit用于验证和执行应用内购买。下面的代码用于验证 InApp 购买是否已过期。对于用户此代码,您的 SwiftyStoreKit在你的项目中。
let appleValidator = AppleReceiptValidator(service: .production)
SwiftyStoreKit.verifyReceipt(using: appleValidator, password: "Enter your inapp secret key") { result in
switch result {
case .success(let receipt):
// Verify the purchase of a Subscription
let purchaseResult = SwiftyStoreKit.verifySubscription(
type: .autoRenewable, // or .nonRenewing (see below)
productId: "Enter your inapp product key",
inReceipt: receipt)
switch purchaseResult {
case .purchased(let expiryDate, _):
print("Product is valid until \(expiryDate)")
case .expired(let expiryDate, _):
print("Product is expired since \(expiryDate)")
case .notPurchased:
print("The user has never purchased this product")
}
case .error(let error):
print("Receipt verification failed: \(error)")
}
}
关于ios - Swift3 - 恢复应用内购买交易时获取交易日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46319871/