iOS“此应用内购买已被购买”popup

我在iOS应用程序中遇到了问题:当我点击“购买”button购买IAP产品时,会popup一个消息,显示以下消息:

此应用内购买已被购买。 它将被免费恢复。

我以前从未有过这种popup窗口,而我的产品只是不续订的订阅 ,所以我想知道为什么在购买订阅时出现此消息。

当我触摸确定closures此popup窗口时,购买不会执行。

这是我的代码:

for transaction in transactions { switch transaction.transactionState { case SKPaymentTransactionState.Purchased, SKPaymentTransactionState.Restored: print("Transaction completed successfully.") SKPaymentQueue.defaultQueue().finishTransaction(transaction) transactionInProgress = false // Sauvegarde le produit acheté savePurchasedProduct(transaction.transactionDate!); break case SKPaymentTransactionState.Failed: print("Transaction Failed"); SKPaymentQueue.defaultQueue().finishTransaction(transaction) transactionInProgress = false break default: break } } 

我遇到过同样的问题。 修正它在这里: 我的IAP不工作。 错误在func Paymentqueue

这是我find的解决scheme:

删除

 SKPaymentQueue.defaultQueue().addTransactionObserver(self) 

你只要把它放在一个地方,每次你的应用程序启动(我把它放在viewDidLoad()中)。

这将检查所有未完成的事务,并在应用程序加载后终止它们,从而在用户触发IAP之前消除任何可能的错误。

(如果这个答案帮助了你,不要忘记加注;))

PS:另外,这不是我的问题,但确保finishTransaction()为每个PurchaseState,就像这里:

 func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { print("Add Payment") for transaction:AnyObject in transactions{ let trans = transaction as! SKPaymentTransaction print(trans.error) switch trans.transactionState{ case .Purchased: print("IAP unlocked") print(p.productIdentifier) let prodID = p.productIdentifier as String switch prodID{ case "IAP id": print("Keep on") keepOn() default: print("IAP not setup") } queue.finishTransaction(trans) break case .Failed: print ("Buy error") queue.finishTransaction(trans) break default: print("default: Error") break } } } 

永远不要忘记:

  queue.finishTransaction(trans)