2016-03-18 5 views
0

У меня есть транзакции восстановления, которые все еще застревают в моей очереди платежей - потому что я никогда не звонил finishTransaction с транзакцией после ее восстановления, когда я тестировал ошибочное действие покупки восстановления.Очистка SKPAymentsQueue: принудительное выполнение незавершенных транзакций

Из некоторых онлайн-исследований я понимаю, что мне нужно вручную принудительно завершить незавершенные транзакции в очереди платежей.

Кто разместил этот код в Objective-C:

// take current payment queue 
SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue]; 
// finish ALL transactions in queue 
[currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
[currentQueue finishTransaction:(SKPaymentTransaction *)obj]; 
}]; 

Я понятия не имею, как превратить его в Swift 2.0.

Может ли кто-нибудь помочь мне сделать это? Спасибо :-)

ответ

1

Вот цикл for, который будет выполнять итерацию по каждой ожидающей транзакции и проверять состояние, и завершить транзакции, которые либо были неудачными, либо успешно куплены.

let currentQueue : SKPaymentQueue = SKPaymentQueue.default(); 
     for transaction in currentQueue.transactions { 
      if (transaction.transactionState == SKPaymentTransactionState.failed) { 
       //possibly handle the error 
       currentQueue.finishTransaction(transaction); 
      } else if (transaction.transactionState == SKPaymentTransactionState.purchased) { 
       //deliver the content to the user 
       currentQueue.finishTransaction(transaction); 
      } else { 
       //handle other transaction states 
      } 
     } 
+0

Ahh. Замечательно! Я просто создаю временную кнопку, чтобы связать ее как IBAction и запустить код. Будет ли это работать? Или мне нужно настроить еще один тестер для песочницы и поместить код в код покупки? Извините, очень новый :-) –

+1

Если вы просто хотите очистить неудачные транзакции, которые в настоящее время застревают, тогда временная кнопка является хорошим решением. Тем не менее, я бы добавил такой код в свой метод SKProductsRequestDelegate updatedTransactions. Важно справляться с ошибками при покупке приложений из-за таких вещей, как плохая сетевая связь/недостаточные средства/и т. Д. Кроме того, в цикле вы должны проверить состояние транзакции и не просто завершить каждую транзакцию. См. Мой обновленный ответ. –

+0

Идеальный смысл. Я сделаю то, что вы предлагаете. Tyvm. –

Смежные вопросы