正如本问题和其他任何地方所讨论的,Apple现在要求应用程序为用户提供一种方法来恢复In App Purchase的已完成交易.
我全力以赴.我的应用程序的第一个版本以某种方式让它在没有它的情况下进行了审核(当时我还没有意识到这个规则,和/或它还没有被强制执行),但后来我开始接收来自用户的大量电子邮件询问缺少的内容(也有数据存储指南,并且不会备份繁重的可下载内容).
所以,假设我在我的UI中的某处包含了一个"恢复"按钮,当点击调用时:
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.用户被提示他的AppleID和/或密码,并且恢复过程开始.
我遇到的问题是:如果没有要恢复的事务,在AppleID提示之后我的应用程序基本上没有任何反应,这可能会让用户感到困惑或使应用程序看起来没有响应或损坏.
我希望能够显示"所有购买都是最新的"或类似的警报视图.
我可以在我的Transaction Observer代码中做些什么来检测这种情况吗?
有没有人认为这将是一个糟糕的设计,UX明智?
我正在尝试使用Swift 3中的应用程序购买.我可以在我的测试设备上成功付款.点击后,我在屏幕顶部有一个恢复按钮可以恢复之前的所有购买.这是我用来恢复的代码.我在函数中的队列总是空的.请帮我解决这个问题.
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
for transaction in queue.transactions{
let trans: SKPaymentTransaction = transaction as SKPaymentTransaction
let prodID = trans.payment.productIdentifier as String
switch prodID {
case "some_iap":
print("Do something")
finishTransaction(trans)
default: break
}
}
updatePurchases()
}
func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
print("error in restore")
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for trans in queue.transactions{
let trans: SKPaymentTransaction = trans as SKPaymentTransaction
print(trans.transactionState.rawValue)
switch (trans.transactionState) {
case .purchased:
let prodID = p.productIdentifier as …Run Code Online (Sandbox Code Playgroud)