2017-01-07 3 views
0

내 앱에 연간 구독을 구현하려고하는데 StoreKit을 사용합니다. 문제는 내가 subscriptionButton을 탭하면됩니다. 오류가 발생하는 앱 : 'NSInvalidArgumentException', reason: 'Cannot finish a purchasing transaction'. 나는이 곳에서 붙어있어서 내 문제를 해결할 수 없다. 그래서, 내 paymentQueue 코드는 다음과 같습니다비 갱신 구독 구매 거래를 완료 할 수 없습니다.

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { 
    print(transactions) 
    for transaction in transactions { 
     print(transaction.error ?? "") 
     switch transaction.transactionState { 
     case .deferred: 
      print("deffered") 

     case let .failed(err): 
      print("failed: \(err)") 
     case .purchased: 
      let productID = p.productIdentifier 
      selectProduct(productID: productID) 
     case .purchasing: 
      print("purhasing") 
      print("produkt name: \(p.localizedTitle)") // after executing this line of code app crashes 
     case .restored: 
      let productID = p.productIdentifier 
      selectProduct(productID: productID) 
     } 
     queue.finishTransaction(transaction) 
    } 
} 

당신이 어떤 제안이 있습니까, 내가 그것을 어떻게 해결할 수 있습니까? 내 경우에는이 문제의

+1

당신은 같은 결과를 얻고있다. ".purchased", ".restored"& ".failed"상태에서만 해당 메소드를 추가하십시오. –

+0

당신의 제안에 아주 좋습니다! 그것은 작동합니다 :) – PiterPan

답변

1

전문 솔루션입니다 : 당신이 방법은 어떤 실행 그 후 감지 상태 "queue.finishTransaction (트랜잭션)"을 구입할 때하는 것이 더 프로세스를 중지하기 때문에

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { 
    for transaction in transactions { 
     print(transaction.error ?? "") 
     switch transaction.transactionState { 
     case .deferred: 
      print("deffered") 
      queue.finishTransaction(transaction) 
     case let .failed(err): 
      print("failed: \(err)") 
      queue.finishTransaction(transaction) 
     case .purchased: 
      let productID = p.productIdentifier 
      selectProduct(productID: productID) 
      queue.finishTransaction(transaction) 
     case .purchasing: 
      print("purhasing") 
     case .restored: 
      let productID = p.productIdentifier 
      selectProduct(productID: productID) 
      queue.finishTransaction(transaction) 
     } 
    } 
}