Я использую покупку в приложении для приложения для 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, никогда не уведомлялся, что транзакция, завершенная, или, отказывается подтверждать это.