Otrzymuję "to, że w zakupie aplikacji zostało już kupione, zostanie ono przywrócone za darmo", ale delegat updatedTransactions nie jest wywoływany i nic się nie dzieje, IAP nie jest wykonywany.SKPaymentQueue updatedTransakcje nie nazywane
Zaimplementowałem Przywróć zakup, który działa dobrze, ale jak mogę zapobiec ponownemu zakupowi przez użytkownika elementu, który nie jest zużywalny, i czemu nie jest wywoływana aktualizacja TRANSransakcje (SKPaymentTransactionState.Restored)?
Nawet dokonanie zakupu po usunięciu i ponownym zainstalowaniu aplikacji pokazuje to okno.
Tu jest moja code.Please dać mi znać, jeśli robię wrong.Thanks cokolwiek
func makePaymentForProduct(product:SKProduct){
let payment = SKPayment.init(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment)
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
}
func restorePurchases(){
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
}
//MARK: SKProductsRequestDelegate
func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
self.delegate?.didGetProducts(response.products)
}
func request(request: SKRequest, didFailWithError error: NSError) {
self.delegate?.purchaseFailed(error.localizedDescription)
}
//MARK: SKPaymentTransactionObserver
func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for (_, transaction) in transactions.enumerate() {
switch (transaction.transactionState) {
case SKPaymentTransactionState.Purchased:
self.completeTransaction(transaction)
break
case SKPaymentTransactionState.Restored:
self.restoreTransaction(transaction)
break
case SKPaymentTransactionState.Failed:
self.failedTransaction(transaction)
break
default:
break
}
}
}
func completeTransaction(transaction:SKPaymentTransaction){
self.delegate?.purchaseSuccessful()
SKPaymentQueue.defaultQueue().finishTransaction(transaction)
}
func restoreTransaction(transaction:SKPaymentTransaction){
self.delegate?.purchaseSuccessful()
SKPaymentQueue.defaultQueue().finishTransaction(transaction)
}
func failedTransaction(transaction:SKPaymentTransaction){
self.delegate?.purchaseFailed("")
SKPaymentQueue.defaultQueue().finishTransaction(transaction)
}
//Restore Purchase
func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) {
self.delegate?.purchaseRestored()
}
func paymentQueue(queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: NSError) {
self.delegate?.purchaseFailed(error.localizedDescription)
}
Zobacz ten link: http://stackoverflow.com/questions/26235822/in-app-purchase-in-swift-with-a-single-product Ten kod IAP dobrze mi służy. –