2
我正嘗試在Swift 3的應用內購買產品。我可以成功在我的測試設備上進行付款。點擊時,屏幕頂部的恢復按鈕應恢復所有以前的購買。這裏是我用來恢復的代碼。我的隊列中的函數總是空的。請幫我解決這個問題。使用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 String
switch prodID {
case "some_iap":
print("do something")
updatePurchases()
finishTransaction(trans)
default:
print("defualt")
finishTransaction(trans)
}
case .failed: break
default: break
}
}
}
func finishTransaction(_ trans:SKPaymentTransaction){
SKPaymentQueue.default().finishTransaction(trans)
SKPaymentQueue.default().remove(self)
}
func paymentQueue(_ queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
}
已表示,該代碼可能是脆弱的,並可能允許任何人恢復自由購買,而不在第一時間爲他們支付。真的嗎? –
是的。每次點擊恢復按鈕時都會調用paymentQueueRestoreCompletedTransactionsFinished。所以你需要檢查標識符,然後恢復 –
@BradLarson正確實施的更新答案。它只會在用戶已經購買時恢復。備查 –