2015-10-15 89 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