Подтвердить что ты не робот

Должен ли я вызвать finishTransaction, когда проверка получения подтверждения сервером не удалась?

Я использую проверку подтверждения на стороне сервера.

Когда клиент

- (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

4b9b3361

Ответ 1

Да, вы должны закончитьTransaction.

Это вам, если вы дадите пользователю то, что они хотят. В некоторых случаях лучше дать пользователю то, что они хотят, даже если квитанция недействительна или подделана (с использованием джейлбрейка). Особенно, когда это ничего не стоит.

Ответ 2

Я завершаю транзакцию, чтобы удалить ее из очереди, но не предоставляйте дополнительный контент, если проверка не выполняется. Если это недопустимая квитанция, то Apple не взимает плату. Если это окажется чем-то другим, например, временно приостановленным сервером проверки Apple, тогда они будут заряжены, и когда они попытаются восстановить покупки (или добавят их снова), они не будут снова заряжаться, и ваше приложение получит еще один снимок проверки чека.

Если проверка по технической причине, такой как сервер Apple, не работает, будет неудобно, но я не вижу другого способа предотвратить кражу вашего контента. Хорошей новостью является то, что вы можете сообщить пользователю всплывающее окно, если сервер Apple выключен, и что они должны повторить попытку позже, а самое главное, что они больше не будут списаны.