Я сталкиваюсь с очень неловким поведением покупок приложений в моем приложении. Приложение представляет собой веб-просмотр, поэтому я создал веб-просмотр и загрузил свои локальные HTML файлы.
Со времени моего последнего обновления IAP Restore теперь требуется несколько попыток, пока он, наконец, не восстановит указанный c продукт. У меня есть 3 продукта, и я заметил, что моему первому IAP требуется 1-2 попытки, пока он не восстановится, а остальные 2 - только после попытки восстановления 3-4-5-6-7 раз.
Ничего не изменилось в восстановить код в последнем обновлении, и я не нашел нигде подсказки в других найденных вопросах.
И второй вопрос: если я купил все 3 продукта, следует ли восстановить один продукт, чтобы восстановить все из них?
ОБНОВЛЕНИЕ: Вот мой код
fun c restorePurchases () {
NetworkActivityIndicatorManager.networkOperationStarted()
SwiftyStoreKit.restorePurchases(atomically: true) { results in
NetworkActivityIndicatorManager.networkOperationFinished()
for purchase in results.restoredPurchases {
let downloads = purchase.transaction.downloads
if !downloads.isEmpty {
SwiftyStoreKit.start(downloads)
} else if purchase.needsFinishTransaction {
// Deliver content from server, then:
SwiftyStoreKit.finishTransaction(purchase.transaction)
}
}
self.showAlert(self.alertForRestorePurchases(results))
}
}
fun c alertForRestorePurchases (_ results: RestoreResults) -> UIAlertController {
if results.restoreFailedPurchases.count > 0 {
print("Restore Failed: \(results.restoreFailedPurchases)")
return alertWithTitle("Restore succesful", message: "Everything was restored.")
} else if results.restoredPurchases.count > 0 {
print("Restore Success: \(results.restoredPurchases)")
var isSuccess = false
for i in 0 ..< results.restoredPurchases.count
{
let pId = results.restoredPurchases[0].productId
if pId == self.currentProductId
{
isSuccess = true
if(pId == appDelegate.pId1)
{
UserDefaultManager.setPurchaseStatus(flag: true)
self.purchaseTimer.invalidate()
}
else if(pId == appDelegate.pId2)
{
UserDefaultManager.setPicaPurchaseStatus(flag: true)
self.purchaseTimer.invalidate()
}
else if(pId == appDelegate.pId3)
{
UserDefaultManager.setPicaRealPurchaseStatus(flag: true)
self.purchaseTimer.invalidate()
}
makeJsScriptCall()
return alertWithTitle("Activated!", message: "Everything was restored!")
}
}
if(!isSuccess)
{
return alertWithTitle("Something went wrong", message: "This is the error that I get until I try restore 3-4 times")
}
fun c showPurchaseActionSheet () {let alert = UIAlertController (title : «Выберите опцию», сообщение: ноль, предпочитаемый стиль: .actionSheet)
alert.addAction(UIAlertAction(title: "Purchase", style: .default , handler:{ (UIAlertAction)in
self.purchase(.nonConsumablePurchase, atomically: true)
}))
alert.addAction(UIAlertAction(title: "Restore", style: .default , handler:{ (UIAlertAction)in
self.restorePurchases()
}))
alert.addAction(UIAlertAction(title: "Dismiss", style: .cancel, handler:{ (UIAlertAction)in
}))
alert.popoverPresentationController?.sourceView = self.view
self.present(alert, animated: true, completion: {
print("completion block")
})
}