自動更新サブスクリプション製品を実装しようとしています。問題は、を呼び出しSKPaymentQueue
て終了できないことです。SKPaymentTransaction
SKPaymentQueue.defaultQueue().finishTransaction(transaction)
func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
if let transactions = transactions as? [SKPaymentTransaction] {
for transaction in transactions {
switch transaction.transactionState {
case .Purchasing:
break
case .Purchased:
queue.finishTransaction(transaction) // finish transaction
self.purchasedWithTranasction(transaction)
case .Failed:
queue.finishTransaction(transaction) // finish transaction
self.failedWithTransaction(transaction)
case .Restored:
queue.finishTransaction(transaction) // finish transaction
self.restoredWithTransaction(transaction)
case .Deferred:
queue.finishTransaction(transaction) // finish transaction
}
}
}
}
上記のように、 InpaymentQueue:updatedTransactions:
メソッドqueue.finishTransaction(transaction)
が呼び出されます。通常、トランザクションは終了しており、もう滞在しません。
しかし、アプリを再度実行すると、そのトランザクションはまだ完了していません。ちなみに、AppDelegateに以下のようにトランザクションオブザーバーを設定しています。そのため、アプリが起動すると、残りのトランザクションは を呼び出して処理を開始しpaymentQueue:updatedTransactions:
ます。それは私の期待のようではありません。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// add transaction observer
SKPaymentQueue.defaultQueue().addTransactionObserver(CargoBay.sharedManager())
....
return true
}
この問題について何か考えがありますか?SKPaymentQueue.defaultQueue().finishTransaction(transaction)
取引が完了しない場合はありますか?