iphone - 内购恢复

标签 iphone xcode swift in-app-purchase

我在恢复购买的产品时遇到问题。每次用户单击“恢复”按钮时,解锁内容都会在检查用户是否登录、是否购买之前起作用。它只是解锁。所以这是我的问题:如何做才是正确的?我添加了具有恢复功能的代码并购买了一个。顺便说一句,购买工作完美。

 func restorePurchases(){
      println("hello")
      SKPaymentQueue.defaultQueue().addTransactionObserver(self)
      SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
 }

 func buyProduct(){
      SKPaymentQueue.defaultQueue().addTransactionObserver(self)
      let payment:SKPayment = SKPayment(product: product)
      SKPaymentQueue.defaultQueue().addPayment(payment)
 }

 func paymentQueue(queue: SKPaymentQueue!, restoreCompletedTransactionsFailedWithError error: NSError!) {
      showAlert("error", message: "hoho")
 }

 func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
      for transaction:AnyObject in transactions {
           if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
                switch trans.transactionState{
                case .Purchased:
                     self.removeAds()
                     SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
                     break
                case .Failed:
                     showAlert("Error", message: "Transaction problem")
                     SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
                     break
                case .Restored:
                     self.removeAds()
                     break
                default:
                     break
                }
           }
      }
 }

最佳答案

我得到了答案! 主要问题是我没有在 .Restored 中完成交易,所以我在 .Purchased 和 .Restored 中得到了同样的结果。

     func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
      for transaction:AnyObject in transactions {
           if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
                switch trans.transactionState{
                case .Purchased, .Restored:
                     self.removeAds()
                     SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
                     break
                case .Failed:
                     showAlert("Error", message: "Transaction problem")
                     SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
                     break
                default:
                     break
                }
           }
      }
 }

下一步 - 我没有检查客户是否可以购买。但在此之前我做了观察者:

     func restorePurchases(){
      SKPaymentQueue.defaultQueue().addTransactionObserver(self)
      if SKPaymentQueue.canMakePayments(){
           SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
      }
 }

所以,这很简单:D 谢谢大家!

关于iphone - 内购恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31352149/

相关文章:

swift - 注释按钮未出现

swift - 文件私有(private)扩展名与普通扩展名

iphone - UIWebView 滚动时在顶部和底部显示白色条

iphone - UIViewController...AppDelegate...代码去哪儿了!

iphone - 如何使用MPMoviePlayerViewController播放youtube视频

iphone - 当没有可用于 tableView 的数据时显示自定义标签

iphone - 我无法对我的 iOS 应用程序进行代码签名

ios - Xcode 测试用例显示没有测试覆盖率

ios - 将今天的扩展添加到 flutter 应用程序的问题

swift - 将平移手势限制在一个方向