Я следовал этому учебнику , чтобы добавить автоматически возобновляемую подписку для моего приложения.Мое приложение было выпущено в магазине приложений, но у меня возникла очень странная проблема: если пользователь нажмет кнопку «Восстановить покупку», он разблокирует функцию без покупки !.Я работал с IAP и никогда раньше такого не было!Вот мой код. В IAPManager.swift
я добавил две строки кодов, которые запускают метод после завершения покупки / восстановления.
private func productPurchaseCompleted(identifier: ProductID?) {
guard let identifier = identifier else { return }
purchasedProductIDs.insert(identifier)
UserDefaults.standard.set(true, forKey: identifier)
productPurchaseCompletionHandler?(true, identifier)
clearHandler()
//Added by me
appDefaults.isDirectory(purchased: true)
NotificationCenter.default.post(name: NSNotification.Name("completePurchase"), object: nil)
}
В моем контроллере представления покупки:
override func viewWillAppear(_ animated: Bool) {
//Register notifications
NotificationCenter.default.addObserver(self, selector: #selector(completePurchase), name: NSNotification.Name("completePurchase"), object: nil)
}
кнопки покупки и восстановления:
//MARK: - Purchase IAP and its methods
@IBAction func purchaseDirectory(_ sender: Any) {
purchaseItemIndex(index: 0)
loading.alpha = 1
}
@IBAction func restorePurchase(_ sender: Any) {
IAPProducts.store.restorePurchases()
loading.alpha = 1
}
private func purchaseItemIndex(index: Int) {
IAPProducts.store.buyProduct(products[index]) { [weak self] success, productId in
guard let self = self else { return }
guard success else {
let alertController = UIAlertController(title: "Failed to purchase product",
message: "Check logs for details",
preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "OK", style: .default))
self.present(alertController, animated: true, completion: nil)
return
}
}
}
И, наконец, завершить функцию покупки:
@objc func completePurchase() {
let alert = UIAlertController(title: "Thank You!", message: "You can now access to directory", preferredStyle: .alert)
let action0 = UIAlertAction(title: "OK", style: .cancel, handler: { (click) in
self.removeAllViewControllers()
self.presentViewControlleryStoryboard(id: "HOME")
})
alert.addAction(action0)
present(alert, animated: true, completion: nil)
loading.alpha = 0
}
Кто-нибудь знает, почему это происходит?Есть ли какая-либо разница между, например, неиспользуемой IAP и подпиской с автоматическим продлением?
Я должен подтвердить, что покупка с восстановлением работает должным образом в среде песочницы