5

自動更新サブスクリプション製品を実装しようとしています。問題は、を呼び出しSKPaymentQueueて終了できないことです。SKPaymentTransactionSKPaymentQueue.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)取引が完了しない場合はありますか?

4

1 に答える 1