Недавно мы запустили приложение, в котором есть только потребляемые покупки внутри приложения. Мы заметили множество поддельных покупок - покупок с недействительными квитанциями, а также с «действительными» квитанциями, но массив in_app в ответе на проверку от Apple является пустым. Мне нужно знать, как пользователи формируют такие «действительные» квитанции? Это квитанция о загрузке приложения, а не о покупке в приложении или что? Сейчас я ставлю следующую проверку для проверки. Извлеките поле «in_app» в json-ответе Apple и, если оно не пустое, проверьте соответствие product_id или нет. Мне нужно знать, достаточно ли этой проверки или их лучше проверить от дурака.
2 ответа
У всех приложений есть квитанция. Те приложения, которые приобрели IAP, имеют поле in_app в квитанции. Ваши пользователи отправляют фальшивый вызов в свой метод updatedTransaction, а вы берете их квитанцию (без IAP, потому что они не совершали покупок) и отправляете ее на свой сервер. Другие пользователи могут откуда-то обменять чек (например, один из 30 воров совершает покупку, извлекает этот действительный чек и отправляет его своим 29 соратникам). Если они вставят эту квитанцию в свое устройство, а затем вызовут updateTransactions, ваш сервер получит их теперь действительную, но дублирующую квитанцию. Ваш сервер должен проверить *** дату получения и обнаружить, что она старше недавнего или, что еще лучше, старше, чем paymentRequest, который вам нужно будет отправить на ваш сервер. (лучше декодировать на устройстве - намного безопаснее)
*** раньше вы могли проверять transaction_id на предмет дублирования transaction_id. К сожалению, вы больше не можете этого сделать, поскольку restoreCompletedTransaction возвращает тот же идентификатор транзакции, что и исходная покупка. Я сказал об этом Apple, и они проигнорировали меня.
Обратитесь к этому In- App Purchase FAQ < A HREF = " https://developer.apple.com/library/archive/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228-CH1-RECEIPT-MY_APP_VALIDATES_ITS_RECEIPT_WITH_THE_APP_STORE_VIA_PAYMENTQUEUE_UPDATEDTRANSACTIONS__AFTER_A_SUCCESSFUL_PURCHASE__HOWEVER__THE_RETURNED_RECEIPT_CONTAINS_AN_EMPTY_IN_APP_ARRAY_RATHER_THAN_THE_EXPECTED_PRODUCTS_ "rel =" nofollow noreferrer "> Мое приложение проверяет получение в App Store через paymentQueue: updatedTransactions: после успешной покупки. Однако возвращенная квитанция содержит пустой массив in_app, а не ожидаемые товары.
Пустой массив in_app указывает, что магазин приложений еще не записал никаких транзакций для пользователя. Возможно, квитанция о заявке еще не обновлена. В этом случае ваше приложение может проинформировать пользователя о том, что квитанция не является текущей, и спросить, обновлять ли ее.
Информация о расходных материалах добавляется в квитанцию при оплате и остается в квитанции до завершения транзакции. После завершения транзакции эта информация будет удалена при следующем обновлении чека. В результате получается пустой массив in_app, если ваше приложение продает только расходные материалы.
Похожие вопросы
Новые вопросы
ios8
iOS 8 - восьмая версия мобильной операционной системы Apple iOS. Он был анонсирован на всемирной конференции разработчиков Apple (WWDC) 2 июня 2014 года и был обнародован 17 сентября 2014 года. Тег ios8 следует использовать для вопросов, относящихся к операционной системе Apple iOS 8. Общие вопросы по iOS должны использовать тег ios.