使用 swift、iOS 恢复 InApp 购买
Restore InApp purchase using swift, iOS
我正在应用购买中实施恢复。我有一个按钮,其操作是
@IBAction func restorePurchases(send : AnyObject){
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
// if (success) {
// I want to do something here
// }
}
我的问题是
- 这是恢复的正确方法吗?
- 我们如何验证恢复购买的操作是否成功?
别忘了检查是否可以付款:
if (SKPaymentQueue.canMakePayments()) {
SKPaymentQueue.default().restoreCompletedTransactions()
}
要检查恢复是否正常,您必须遵循以下协议:
SKPaymentTransactionObserver
然后实现方法:
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!)
并通过以下方式订阅事件:
SKPaymentQueue.default().add(self)
最后,这是我如何检查结果的一个例子:
func paymentQueue(_ queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
print("Received Payment Transaction Response from Apple");
for transaction in transactions {
switch transaction.transactionState {
case .purchased, .restored:
print("Purchased purchase/restored")
SKPaymentQueue.default().finishTransaction(transaction as SKPaymentTransaction)
break
case .failed:
print("Purchased Failed")
SKPaymentQueue.default().finishTransaction(transaction as SKPaymentTransaction)
break
default:
print("default")
break
}
}
}
出于某种原因,即使在尝试 SKPaymentQueue.default().restoreCompletedTransactions()
之后,在恢复过程中也从未为我调用过以下函数。
func paymentQueue(queue: SKPaymentQueue!,
updatedTransactions transactions: [AnyObject]!)
添加这行代码 SKPaymentQueue.default().add(self)
是为了让我的 class 成为观察者,但仍然没有更新。
如果您尝试重新付款并且 StoreKit API 会自动决定是否应该购买或恢复并相应地显示消息,似乎会在恢复的场景中调用此函数。
即使从用户的角度考虑,他们没有再次收费,Apple拒绝了我们的应用程序,因为没有添加恢复场景。
因此,如果您在代码中调用 SKPaymentQueue.default().restoreCompletedTransactions()
,似乎会处理这些额外的 StoreKit 委托来管理您的恢复:
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
handleSuccess()
}
func paymentQueue(_ queue: SKPaymentQueue,
restoreCompletedTransactionsFailedWithError error: Error) {
handleError()
}
我正在应用购买中实施恢复。我有一个按钮,其操作是
@IBAction func restorePurchases(send : AnyObject){
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
// if (success) {
// I want to do something here
// }
}
我的问题是
- 这是恢复的正确方法吗?
- 我们如何验证恢复购买的操作是否成功?
别忘了检查是否可以付款:
if (SKPaymentQueue.canMakePayments()) {
SKPaymentQueue.default().restoreCompletedTransactions()
}
要检查恢复是否正常,您必须遵循以下协议:
SKPaymentTransactionObserver
然后实现方法:
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!)
并通过以下方式订阅事件:
SKPaymentQueue.default().add(self)
最后,这是我如何检查结果的一个例子:
func paymentQueue(_ queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
print("Received Payment Transaction Response from Apple");
for transaction in transactions {
switch transaction.transactionState {
case .purchased, .restored:
print("Purchased purchase/restored")
SKPaymentQueue.default().finishTransaction(transaction as SKPaymentTransaction)
break
case .failed:
print("Purchased Failed")
SKPaymentQueue.default().finishTransaction(transaction as SKPaymentTransaction)
break
default:
print("default")
break
}
}
}
出于某种原因,即使在尝试 SKPaymentQueue.default().restoreCompletedTransactions()
之后,在恢复过程中也从未为我调用过以下函数。
func paymentQueue(queue: SKPaymentQueue!,
updatedTransactions transactions: [AnyObject]!)
添加这行代码 SKPaymentQueue.default().add(self)
是为了让我的 class 成为观察者,但仍然没有更新。
如果您尝试重新付款并且 StoreKit API 会自动决定是否应该购买或恢复并相应地显示消息,似乎会在恢复的场景中调用此函数。
即使从用户的角度考虑,他们没有再次收费,Apple拒绝了我们的应用程序,因为没有添加恢复场景。
因此,如果您在代码中调用 SKPaymentQueue.default().restoreCompletedTransactions()
,似乎会处理这些额外的 StoreKit 委托来管理您的恢复:
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
handleSuccess()
}
func paymentQueue(_ queue: SKPaymentQueue,
restoreCompletedTransactionsFailedWithError error: Error) {
handleError()
}