2017-10-10 4 views
0

私はアプリ内購入をテストしようとしています。購入するときにサインインボックスを何度も何度も何度も繰り返します。彼女は、私が購入を行う能力をチェックし、サンドボックステストのための継続的なサインインダイアログボックス

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

そして、私はIAPHelper.sharedIntance.createPaymentRequestForProduct()

呼び出す UIButtonで私の主な ViewControollerで観測を開始し、アプリケーション・委任で

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 
      } 
     } 
    } 
} 

私のヘルパーです

私は自分のサンドボックスのユーザーを接続し、アプリ内購入を接続しました。私は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() 

これで問題が解決します。

関連する問題