ios - Swift3 - 恢复应用内购买交易时获取交易日期

标签 ios swift transactions in-app-purchase

我正在尝试恢复应用内购买(非续订订阅),以防用户在新手机上安装该应用或在他的手机上重新安装该应用。我想使用方法获取应用内购买的原始购买日期

 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/

相关文章:

swift - 将应用程序提交到 iOS9 的应用程序商店

java - 为什么要使用 session.beginTransaction & transaction.commit

swift - dateDecodingStrategy 显示错误的年份

swift - 如何根据参数过滤 Firebase 事件?

java JUnit 重复表映射,异常

Perl 和 Rose::DB Postgres 事务

mysql - 带有数组的静态单元格

android - jquery 下拉菜单和文本框在 ios chrome 浏览器上不起作用

ios - 如何在 iphone 中解析来自谷歌地图的谷歌方向 api 数据?

ios - 使用 Swift 钥匙串(keychain)包装器时发生意外崩溃