Я тестирую покупки в приложении с песочницей. В методе paymentQueue updateTransactions я ловлю состояние транзакции, затем, если покупка или восстановление состояния, я пытаюсь разблокировать контент (пользователь подписан, затем переключаю режим в Premium).
, пока все работает отлично. Пользователь будет приобретать товар, затем пользователь переходит в режим Premium. Если пользователь удалил приложение со своего устройства, восстановление также работает и переключите режим в премиум.
Но каким-то образом, после того, как пользователь нажал кнопку восстановления в это время, никаких проблем не возникает. Но если пользователь близко к приложению, то, открыв его дважды, пользователь снова увидит купленные чехлы. Некоторые случаи покупки снова работают без каких-либо попыток покупки.
Насколько я понимаю, после добавления наблюдателя SKProductQueue вызывается метод updatedTransaction. Тогда каким-то образом дело о покупке работает.
Очень сложно описать то, на что я нахожусь, но в основном после того, как пользователь нажал кнопку восстановления в следующий раз, когда обновленный метод транзакции неожиданно сработал, а купленный случай сработал. Также я поставлю покупку и восстановление функции, но это правильно, кажется, что.
Любая идея была бы благодарна!
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()
}