Транзакция возвращается после finishTransaction: был назван на нем

Я использую покупку в приложении для приложения для iPhone. У меня есть класс, который действует как SKProductsRequestDelegate и SKPaymentTransactionObserver, и это все хорошо работает в в настоящее время выпускаемой версии, доступной на iTunes.

Однако после недавнего добавления нового непотребляемого продукта и тестирования его в среде Песочницы, я теперь встречаюсь со странной проблемой. Каждый раз, когда я запускаю приложение, покупка, которую я сделал вчера, вновь появляется в списке транзакций, переданном мне paymentQueue:updatedTransactions:, несмотря на то, что я звонил [[SKPaymentQueue defaultQueue] finishTransaction:transaction] уже (несколько раз). Это немертво!

В моем paymentQueue:updatedTransactions: реализация, я имею:

for (SKPaymentTransaction* transaction in transactions) 
    switch (transaction.transactionState)
    {
        case SKPaymentTransactionStatePurchased:
        case SKPaymentTransactionStateRestored:
        {
            ....
                DDLog(@"Transaction for %@ occurred originally on %@.", transaction.payment.productIdentifier, transaction.originalTransaction.transactionDate);
                ....

Я затем обрабатываю покупку, загружаю пользовательское содержание и наконец, в другом методе, делаю это:

for (SKPaymentTransaction* transaction in [[SKPaymentQueue defaultQueue] transactions])         
            if (([transaction.payment.productIdentifier isEqualToString:theParser.currentProductID]) &&
                 ((transaction.transactionState==SKPaymentTransactionStatePurchased) || (transaction.transactionState==SKPaymentTransactionStateRestored))
               )
            {
                DDLog(@"[[ Transaction will finish: product ID = %@; date = %@ ]]", transaction.payment.productIdentifier, transaction.transactionDate);
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            }

Как Вы, возможно, заметили, я не держусь за исходный объект транзакции ради простоты, и относительно легко найти его позже от вызова до [[SKPaymentQueue defaultQueue] transactions]. Независимо, я действительно вижу ожидаемый вывод; то, что транзакция завершается и что она точно соответствует идентификатору продукта и дате исходной транзакции. Однако в следующий раз, когда я запускаю приложение, целые вещи запускаются! Это похоже на iTunes Store, никогда не уведомлялся, что транзакция, завершенная, или, отказывается подтверждать это.

23
задан Craig McMahon 29 June 2010 в 09:10
поделиться