iOS应用内购买在恢复完成后自动购买
我正在用sandbox测试应用内购买。在paymentQueue updateTransactions方法中,我捕获事务状态,然后如果状态购买或恢复,我尝试解锁内容(用户已订阅,然后将模式转换为Premium) 到目前为止,一切正常。用户将购买物品,然后用户进入高级模式。若用户从其设备中删除了应用程序,则恢复案例也可以工作,并将模式转换为高级模式 但不知何故,在用户点击恢复按钮后,在那个时间并没有出现任何问题。但若用户靠近应用程序,然后打开两次,用户将再次看到购买的案例。一些购买案例在没有任何购买尝试的情况下再次工作 我的理解是,添加SKProductQueue observer updatedTransaction方法调用后。然后不知何故,购买案例是可行的 这很难描述我正在做什么,但基本上是在用户下次点击“还原”按钮后,更新的Transaction方法突然起作用,购买的案例也起作用。此外,我将使用“购买”和“还原”功能,但这些功能看起来是正确的 任何想法都将不胜感激iOS应用内购买在恢复完成后自动购买,ios,swift,in-app-purchase,payment,restore,Ios,Swift,In App Purchase,Payment,Restore,我正在用sandbox测试应用内购买。在paymentQueue updateTransactions方法中,我捕获事务状态,然后如果状态购买或恢复,我尝试解锁内容(用户已订阅,然后将模式转换为Premium) 到目前为止,一切正常。用户将购买物品,然后用户进入高级模式。若用户从其设备中删除了应用程序,则恢复案例也可以工作,并将模式转换为高级模式 但不知何故,在用户点击恢复按钮后,在那个时间并没有出现任何问题。但若用户靠近应用程序,然后打开两次,用户将再次看到购买的案例。一些购买案例在没有任何购
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
print(transaction.transactionState.status(), transaction.payment.productIdentifier)
switch transaction.transactionState {
case .purchasing : break
case .purchased:
// set true for premium mode then turn back to main screen from purchase screen.
UserDefaults.standard.setValue(true, forKey: "isUserSubscribe")
UserDefaults.standard.synchronize()
getBackMainScreenProvider.Instance.returnMain()
print("purchased")
queue.finishTransaction(transaction)
break
case .failed:
queue.finishTransaction(transaction)
break
case .restored:
// this case is works more than once but if user has more than purchase
// but its okay.
UserDefaults.standard.setValue(true, forKey: "isUserSubscribe")
UserDefaults.standard.synchronize()
getBackMainScreenProvider.Instance.returnMain()
AppDelegate.restoreClickFlag = true
queue.finishTransaction(transaction)
break
default : break
}
}
}
func purchase (product: IAPProduct) {
guard let productToPurchase = products.filter({ $0.productIdentifier == product.rawValue }).first else { return }
let payment = SKPayment(product: productToPurchase) // request to the Appstore in order to payment process
paymentQueue.add(payment)
print("nasıl...")
}
func restorePurchases () {
print("restoring purchases...")
paymentQueue.restoreCompletedTransactions()
}
没有人能回答你的问题,因为他们不知道你在用UserDefaults做什么。@ElTomato我告诉你整个故事,但是如果你不想得到任何东西,那就是你的问题。我正在存储包含用户购买的布尔值。之后,应用程序转向高级模式,但我已经说过,这不是问题发生的原因。一切都很顺利。问题与高级模式无关。用户还原后,updatedTransaction函数意外工作。这就是问题所在。我不建议在
UserDefault
s中保存isUserSubscribe
。。。强烈建议您改用钥匙链UserDefault
s是最安全的(因此越狱设备很容易就能免费订阅)。