2015-10-15 97 views
1

调用函数时,如下(或购买产品),我面临的问题:错误时调用应用程序内购买 - 迅速

FUNC restoreCompletedTransactions(){ SKPaymentQueue.defaultQueue()restoreCompletedTransactions(); }

它返回如下错误:

无法连接到iTunes Store的” 的UserInfo = {NSLocalizedDescription =无法连接到iTunes商店, SSErrorHTTPStatusCodeKey = 503}

什么是如何解决的? 我该如何解决它?

谢谢

回答

0

我之前就有过这个问题!它很容易修复。确保您使用常规帐户和iTunes从应用程序商店注销。

下次您在设备上测试IAP时,请使用您的沙盒帐户登录。它应该工作。

而且,如果不解决您的问题,看看这个:My IAP isn't working. Bugs at func Paymentqueue

它包含了我对单边行动计划的代码(工作)和一些技巧来解决一些问题。我希望这个答案是有帮助的;)

以下是完整的IAP代码:

import UIKit 
import StoreKit 


class GameViewController: UIViewController, ADBannerViewDelegate, SKProductsRequestDelegate, SKPaymentTransactionObserver, GKGameCenterControllerDelegate,GADBannerViewDelegate{ 


    @IBOutlet var outRemoveAds: UIButton! 
    @IBOutlet var outRestorePurchases: UIButton! 


    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 

     if NSUserDefaults.standardUserDefaults().objectForKey("val") != nil { 
      print("Has a value.") 
      banner.removeFromSuperview() 
      bannerGoogle.removeFromSuperview() 
      outRemoveAds.removeFromSuperview() 
      outRestorePurchases.removeFromSuperview() 
      removeInterFrom = 1 
     } 
     else { 
      print("No Value.") 
     } 

     if(SKPaymentQueue.canMakePayments()){ 
      print("IAP is enabled, loading...") 
      let productID:NSSet = NSSet(objects:"IAP id") 
      let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>) 
      request.delegate = self 
      request.start() 
     } 
     else{ 
      print("Please enable IAPS") 

     } 

    } 


    //IAP Ads 

    @IBAction func removeAds(sender: UIButton) { 
     for product in list{ 
      let prodID = product.productIdentifier 
      if (prodID == "IAP id"){ 
       p = product 
       buyProduct() 
       break 
      } 
     } 
    } 
    @IBAction func restorePurchases(sender: UIButton) { 
     SKPaymentQueue.defaultQueue().restoreCompletedTransactions() 
    } 


    //IAP Functions 

    var list = [SKProduct]() 
    var p = SKProduct() 

    func removeAds(){ 
     banner.removeFromSuperview() 
     bannerGoogle.removeFromSuperview() 
     outRemoveAds.removeFromSuperview() 
     outRestorePurchases.removeFromSuperview() 
     let theValue = 10 
     NSUserDefaults.standardUserDefaults().setObject(theValue, forKey: "val") 
     NSUserDefaults.standardUserDefaults().synchronize() 
    } 

    func buyProduct(){ 
     print("Buy: "+p.productIdentifier) 
     let pay = SKPayment (product: p) 
     SKPaymentQueue.defaultQueue().addPayment(pay as SKPayment) 
    } 

    func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) { 
     print("Product Request") 
     let myProduct = response.products 

     for product in myProduct{ 
      print("Product Added") 
      print(product.productIdentifier) 
      print(product.localizedTitle) 
      print(product.localizedDescription) 
      print(product.price) 

      list.append(product as SKProduct) 
     } 
    } 

    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("Remove Ads") 
        removeAds() 
       default: 
        print("IAP not setup") 
       } 
       queue.finishTransaction(trans) 
       break 
      case .Failed: 
       print ("Buy error") 
       queue.finishTransaction(trans) 
       break 
      default: 
       print("default: Error") 
       break 
      } 
     } 
    } 

    func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) { 
     print("Purchases Restored") 

     _ = [] 
     for transaction in queue.transactions { 
      let t: SKPaymentTransaction = transaction as SKPaymentTransaction 

      let prodID = t.payment.productIdentifier as String 
      switch prodID{ 
      case "IAP id": 
       print("Remove Ads") 
       removeAds() 
      default: 
       print("IAP not setup") 
      } 


     } 
    } 
    func finishTransaction(trans:SKPaymentTransaction){ 
     print("Finshed Transaction") 
    } 

    func paymentQueue(queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) { 
     print("Remove Transaction") 
    } 
} 

地说:

SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
在viewDidLoad中

或viewDidAppear