"これはアプリの購入で既に購入されていますが、無料で復元されます"が表示されますが、代理人のupdatedTransactionsは呼び出されず何も起こらず、IAPは実行されません。SKPaymentQueue updatedTransactionsが呼び出されていません
正常に動作している復元購入を実装しましたが、ユーザーが非消耗品の購入をやり直さないようにするにはどうすればよいでしょうか?また、代理人updatedTransactions(SKPaymentTransactionState.Restored)
アプリを削除して再インストールした後でも、このポップアップが表示されます。私がお勧めしたい - ここ
は私code.Pleaseは、あなたが問題になる可能性が.restoreCompletedTransactions()
を呼び出し後にトランザクションオブザーバーを設定している私は何のwrong.Thanksに
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)
}
このリンクを参照してください:http://stackoverflow.com/questions/26235822/in-app-purchase-in-swift-with-a-single-productこのIAPコードは私に非常に役立ちました。 –