首页 > 解决方案 > 如何获取通过In App Purchase进行的订阅是Active还是InActive?

问题描述

我已经实现了 IAP,我将交易状态存储在 UserDefault 中,根据 UserDefault 中的值,我将决定是否在 ViewWillAppear 中显示 Buy Button,但问题是当我们卸载应用程序时,Userdefault 值被清除并且我不会得到正确的值来处理购买按钮的可见性,是否有任何其他方式可以处理或检查用户之前是否购买过产品?如果他购买了产品,我将不会在 UI 中显示任何购买按钮如果他没有购买,我将显示购买按钮。

// Calling this in ViewWillAppear
if isSubscriptionActive() {
            subscriptionStatusLbl.text = "Active Plan"
            shouldhidePriceView(isHidden: true)
        } else {
            subscriptionStatusLbl.text = "Subscription Plan"
            shouldhidePriceView(isHidden: false)
        }

// This function return Bool value depending on whether the value is present in UserDefault or not

 func isSubscriptionActive() -> Bool {
        let purchaseStatus` = UserDefaults.standard.bool(forKey: productID)
        if purchaseStatus {
            return true
        } else {
            return false
        }
    }


    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    
        for transaction in transactions {
            switch transaction.transactionState {
            case .purchased :
                print("Successful Transaction")
// here I am storing value in Userdefault
                UserDefaults.standard.set(true, forKey: productID)
                shouldhidePriceView(isHidden: true)
                SKPaymentQueue.default().finishTransaction(transaction)
                break ;
            case .failed:
                print("Failed Transaction")
                if let error = transaction.error {
                    print("Transaction failed due to : \(error.localizedDescription)")
                }
                shouldhidePriceView(isHidden: false)
                SKPaymentQueue.default().finishTransaction(transaction)
                break ;
            case .restored:
                print("Restored : Already Purchased");
                customNavBarView.blueToothBtn.isHidden = true
                shouldhidePriceView(isHidden: true)
                UserDefaults.standard.set(true , forKey: productID)
                break;
            default:
                break;
                
            }
        }
    }

标签: iosswiftin-app-purchase

解决方案


我想您没有任何后端(或任何用户帐户),并且所有内容都本地存储在您的应用程序中。

如果我是正确的,唯一的方法是在您的付费专区添加一个“恢复”链接,并在您的设置页面中添加一个“恢复”按钮。这是官方文档


推荐阅读