Swift: 如何解决奇怪的应用内购买行为?
Swift: how to fix strange in-app purchase behavior?
我根据这个使用代码进行应用内购买。但是我 运行 遇到了一些 st运行ge 错误。例如:
我 FirstViewController
有锁定的内容,PurchasesViewController
有购买按钮。当我点击 PurchasesViewController
中的购买按钮时,确认购买并等待几秒钟以通知购买成功。接下来我回到 FirstViewController
并看到该内容已解锁。在这个例子中,一切正常。但是...
问题:
如果我在 PurchasesViewController
中点击购买按钮,确认购买并且不等待通知,我返回 FirstViewController
并在那里收到通知。我的内容未解锁。即使我重新启动应用程序内容也没有解锁。但是,如果我单击 restore purchases
按钮,所有启动工作正常,锁定的内容将被解锁。
这个问题可能会让用户感到困惑。所以我想锁定界面并显示 activity indicator
直到用户收到有关购买成功的通知。用户在通知中单击“确定”后 windows 我想解锁界面并删除 activity indicator
。但是怎么做呢?何时何地调用锁定接口函数?
在我的项目中,我通常使用 https://github.com/SVProgressHUD/SVProgressHUD 来显示加载。在您的情况下,当用户点击购买按钮时,您需要显示 SVProgress.show()
。并在所有购买完成时添加 SVProgress.dismiss()
SVProgress.showErrorWithStatus(error.localizedDescription)
当您遇到付款问题时。
在 SKPaymentTransactionObserver 上有 func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction])
这个函数你可以像这个例子一样检查状态 paymentQueue:
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for t in transactions {
switch t.transactionState {
case .purchasing, .deferred: break // do nothing
case .purchased, .restored:
let p = t.payment
if p.productIdentifier == whatever {
queue.finishTransaction(t)
SVProgress.dismiss()
}
case .failed:
queue.finishTransaction(t)
SVProgress.showErrorWithStatus("Error message")
}
}
}
我根据这个
我 FirstViewController
有锁定的内容,PurchasesViewController
有购买按钮。当我点击 PurchasesViewController
中的购买按钮时,确认购买并等待几秒钟以通知购买成功。接下来我回到 FirstViewController
并看到该内容已解锁。在这个例子中,一切正常。但是...
问题:
如果我在 PurchasesViewController
中点击购买按钮,确认购买并且不等待通知,我返回 FirstViewController
并在那里收到通知。我的内容未解锁。即使我重新启动应用程序内容也没有解锁。但是,如果我单击 restore purchases
按钮,所有启动工作正常,锁定的内容将被解锁。
这个问题可能会让用户感到困惑。所以我想锁定界面并显示 activity indicator
直到用户收到有关购买成功的通知。用户在通知中单击“确定”后 windows 我想解锁界面并删除 activity indicator
。但是怎么做呢?何时何地调用锁定接口函数?
在我的项目中,我通常使用 https://github.com/SVProgressHUD/SVProgressHUD 来显示加载。在您的情况下,当用户点击购买按钮时,您需要显示 SVProgress.show()
。并在所有购买完成时添加 SVProgress.dismiss()
SVProgress.showErrorWithStatus(error.localizedDescription)
当您遇到付款问题时。
在 SKPaymentTransactionObserver 上有 func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction])
这个函数你可以像这个例子一样检查状态 paymentQueue:
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for t in transactions {
switch t.transactionState {
case .purchasing, .deferred: break // do nothing
case .purchased, .restored:
let p = t.payment
if p.productIdentifier == whatever {
queue.finishTransaction(t)
SVProgress.dismiss()
}
case .failed:
queue.finishTransaction(t)
SVProgress.showErrorWithStatus("Error message")
}
}
}