如何查看应用内购买(自动续费订阅)的购买状态?

Sla*_*vic 6 in-app-purchase ios swift

我使用自动续订订阅为该应用程序创建了应用程序内购买功能。问题是我不确定如何检查购买状态,订阅是否已用完或仍然有效。

这是我尝试保存购买状态的地方:

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    print("add payment")

    for transaction: AnyObject in transactions {
        let trans = transaction as! SKPaymentTransaction
        print(trans.error)

        switch trans.transactionState {
        case .purchased:
            print("buy ok, unlock IAP HERE")
            print(p.productIdentifier)

            let prodID = p.productIdentifier
            switch prodID {
                case "com.test.UnlockTools.Subscription1":
                    print("tool set 1 unlocked")
                    uTool1()
                    print("tool set 2 unlocked")
                    uTool2()
                    print("tool set 3 unlocked")
                    uTool3()
                    UserDefaults.standard.set(true, forKey: "isSubbed")
                default:
                    print("IAP not found")
                }
            queue.finishTransaction(trans)
        case .failed:
            print("buy error")
            queue.finishTransaction(trans)
            break

        default:
            print("Default")
            break
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我调用 UserDefaults 并允许或拒绝按钮交互的地方:

override func viewDidLoad() {
    super.viewDidLoad()

    if(SKPaymentQueue.canMakePayments()) {
        print("IAP is enabled, loading")
        let productID: NSSet = NSSet(object: "com.test.UnlockTools.Subscription1")
        let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>)
        request.delegate = self
        request.start()
    } else {
        print("please enable IAPS")
    }

    status = UserDefaults.standard.bool(forKey: "isSubbed") ?? false

    if status == true {
        unlockTool1.isUserInteractionEnabled = true
        unlockTool2.isUserInteractionEnabled = true
        unlockTool3.isUserInteractionEnabled = true
    } else {
        unlockTool1.isUserInteractionEnabled = false
        unlockTool2.isUserInteractionEnabled = false
        unlockTool3.isUserInteractionEnabled = false
    }

}
Run Code Online (Sandbox Code Playgroud)

如果我找到状态,那么我将能够将状态保存为真/假。我尝试使用 UserDefaults 并取得了一些成功。但不确定我是否将代码放置在最佳位置。

如果订阅仍然有效,我想允许用户单击按钮,并在订阅已用完时拒绝按钮单击。

如果需要,我会添加更多代码。任何帮助将不胜感激。

enc*_*ife 2

/verifyReceipt检查订阅状态的唯一方法是使用其端点 -文档向 Apple 验证收据,看看它是否仍然有效。

您可以做的是在购买后缓存一些到期日期,并使用它来检查订阅是否有效。如果已过有效期,您可以与 Apple 重新检查收据,看看是否已续订。还有一些边缘情况,即用户在到期日期之前获得退款并且订阅被取消 - 您应该定期向 Apple 更新您的收据以检查这种情况。理想情况下,这一切都应该发生在服务器端以避免盗版。

这是一篇很棒的文章,很好地总结了 Apple 订阅的要点:iOS 订阅很困难