首页
学习
活动
专区
圈层
工具
发布

IAP恢复
EN

Stack Overflow用户
提问于 2015-07-11 00:18:01
回答 1查看 34关注 0票数 0

我在修复购买的产品方面遇到了问题。每次用户单击还原按钮,解锁内容在检查用户是否登录之前都会正常工作,不管他是否购买了它。它只是解锁而已。这是我的问题:怎么做才对?我添加了具有恢复功能的代码并购买了一个。顺便说一句,采购工作很完美。

代码语言:javascript
复制
 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
                }
           }
      }
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-11 11:15:08

我知道答案了!主要的问题是我没有在.Restored中完成事务,所以对于.Purchased和.Restored,我得到了同样的东西。

代码语言:javascript
复制
     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
                }
           }
      }
 }

接下来-我没有检查客户是否可以购买。但在此之前,我让观察者:

代码语言:javascript
复制
     func restorePurchases(){
      SKPaymentQueue.defaultQueue().addTransactionObserver(self)
      if SKPaymentQueue.canMakePayments(){
           SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
      }
 }

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31352149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档