Я использую проверку подтверждения на стороне сервера.
Когда клиент
- (void)paymentQueue:(SKPaymentQueue *)queue
updatedTransactions:(NSArray *)transactions
а transactionState
- SKPaymentTransactionStatePurchased
,
клиент отправляет квитанцию на наш сервер,
и наш сервер проверяет его.
Когда проверка подтверждения на стороне сервера завершается успешно,
клиент явно вызывает finishTransaction
, без проблем.
Когда проверка подтверждения на стороне сервера не удалась, потому что apple временно возвратил non json, или клиент отправил недопустимую квитанцию или что-то еще, сервер возвращает эту информацию клиенту.
Далее, что должен делать наш клиент?
Должны ли мы называть finishTransaction
?
Это приводит к недействительным транзакциям, живущим вечно в очереди? как сказал в этом вопросе: покупка iPhone в приложении: проверка квитанции
Но если вы обнаружите, что квитанция недействительна, вы должны завершить связанную транзакцию. Если нет, у вас могут быть дополнительные транзакции, живущие вечно в очереди транзакций. Это означает, что каждый раз, когда ваше приложение запускается, paymentQueue: updatedTransaction: будет вызываться один раз за транзакцию...
Но если мы делаем finishTransaction
, наш ценный пользователь заряжается этой квитанцией (которую мы не смогли проверить), правильно?
Или истекает ли транзакция с подтверждением проверки в течение определенного периода?
Является ли это документированным где-то в документе Apple? Я не мог найти никого в http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction/Introduction.html