2017-10-10 83 views
0

我正在嘗試測試我的應用內購買,並且當我去購買它時,我會一遍又一遍地收到登錄框。她是我的助手連續登錄對話框進行沙箱測試

import Foundation 
import StoreKit 

class IAPHelper: NSObject { 
    private final let productIdentifiers: Set<String> = ["non-consumable"] 
    static let sharedIntance = IAPHelper() 

    private var request: SKProductsRequest! 
    private var products: [SKProduct] = [] 

    func performProductRequestForIdentifiers() { 
     request = SKProductsRequest(productIdentifiers: productIdentifiers) 
     request.delegate = self 
     request.start() 
    } 

    func setupPurchases(_ handler: @escaping (Bool) -> Void) { 
     if SKPaymentQueue.canMakePayments() { 
      handler(true) 
      SKPaymentQueue.default().add(self) 
      return 
     } 
     handler(false) 
    } 

    func createPaymentRequestForProduct() { 
     guard let product = products.first else { return } 
     print(product.localizedTitle) 
     let payment = SKMutablePayment(product: product) 
     payment.quantity = 1 
     SKPaymentQueue.default().add(payment) 
    } 
} 

extension IAPHelper: SKProductsRequestDelegate { 
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { 
     products = response.products 
    } 
} 

extension IAPHelper: SKPaymentTransactionObserver { 
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { 
     for transaction in transactions { 
      switch transaction.transactionState { 
      case .purchasing: 
       print("purchasing") 
       break 
      case .purchased: 
       print("purchased") 
       queue.finishTransaction(transaction) 
       break 
      case .failed: 
       print("failed") 
       queue.finishTransaction(transaction) 
       break 
      case .restored: 
       print("restored") 
       queue.finishTransaction(transaction) 
       break 
      case .deferred: 
       print("deferred") 
       break 
      } 
     } 
    } 
} 

在App-代表,我檢查進行購買,並開始觀測

IAPHelper.sharedIntance.setupPurchases { (success) in 
    if success { 
     IAPHelper.sharedIntance.performProductRequestForIdentifiers()     
    } 
} 

的能力,並在我的主要ViewControollerUIButton我打電話IAPHelper.sharedIntance.createPaymentRequestForProduct()

我有我的沙盒用戶在連接和應用程序內購買做連接也。我在iPhone上退出了我的真實帳戶,並登錄了沙箱。任何幫助都會很棒。

回答

0

我認爲你的代碼有問題,特別是在你添加SKPaymentTransactionObserver的部分。

你下面的功能是有點怪異:

func setupPurchases(_ handler: @escaping (Bool) -> Void) { 
     if SKPaymentQueue.canMakePayments() { 
      handler(true) 
      SKPaymentQueue.default().add(self) 
      return 
     } 
     handler(false) 
    } 

什麼,我建議你做的是以下幾點:

func setupPurchases() { 
     SKPaymentQueue.default().add(self) 
} 

,然後將下面的代碼添加到AppDelegate類,裏面的didFinishLaunchingWithOptions方法:

IAPHelper.sharedIntance.setupPurchases() 

希望這能解決問題。