Ответ 1
Лучшее решение на данный момент, похоже, проверяет транзакции IAP с использованием внешнего сервера, а затем отправляет какой-то определенный тип устройства, чтобы разблокировать платный элемент, который может быть сгенерирован только на этом сервере. Это не пуленепробиваемый, но это должно сделать ваше приложение очень устойчивым к любой системе крекинга IAP общего назначения; кто-то, кто хотел взломать ваше приложение, в значительной степени должен был разработать трещину специально для этого. (что намного сложнее, что далеко не доступно для большинства людей, использующих IAP Cracker)
Вот что вам в основном нужно делать:
- Создайте решение для обеспечения безопасности в приложении; что-то вроде уникального ключа, который открывает вашу добавленную функциональность. Если добавленная функциональность принимает форму файла данных, то это может быть ключ шифрования для дешифрования этого файла, если все это в коде, тогда это немного сложнее, но есть много творческих решений (зашифрованные строковые константы, например). Однако, что бы это ни было, он должен полагаться или проверять наличие части данных, которую он получит с вашего веб-сервера.
- Измените свой код обработки IAP, чтобы при просмотре обрабатываемой транзакции он отправил детали этой транзакции на ваш веб-сервер и вернул уникальный ключ, необходимый на шаге 1.
- Напишите простой script на вашем веб-сервере, который берет данные о транзакции, проверяет их с помощью Apple (подробности см. в документах разработчика о том, как работает проверка чеков - довольно простой запрос JSON), а при успешной проверке возвращает ключ с шага 1.
(см. текст после EDIT ниже для дополнительной проверки, которую вы должны сделать сейчас на шаге 3)
В вашем случае, так как ваше приложение уже было взломанным, и вы пытаетесь отключить людей, которые получили ваш IAP-элемент незаконно, вы будете использовать эту функциональность в новой версии вашего приложения, а затем вызовите функцию restoreCompletedTransactions первым когда была запущена новая версия, чтобы повторно проверить/повторно активировать покупки для ваших законных пользователей и заблокировать всех остальных.
Я должен добавить, однако, что это LOT работы - потребовалось пару недель времени программиста, чтобы заставить его работать бесперебойно, хотя теперь есть открытый код с открытым исходным кодом, который будет выполните большую часть шагов 2 и 3 для вас. Там также стоимость поддержки и PR для этого этапа реактивации - неизбежно некоторые люди будут менять учетные записи iTunes или будут без подключения к интернету или что-то в этом роде, и они, вероятно, будут довольно тиканы, чтобы даже вкратце потерять доступ к тому, что они законно заплатили за.
Вам нужно взвесить, действительно ли стоит потратить время на это, когда трещина доступна только пользователям джейлбрейка (так что примерно 90% ваших потенциальных клиентов не затронуты), и большинство людей, которые его устанавливают, вряд ли будут платить для вашего приложения в любом случае; не бойтесь огромного количества пользователей, взломавших ваше приложение, многие люди с удовольствием скачат что-то бесплатно, даже если они никогда не заплатили за него. Вероятно, вам было бы лучше потратить ваше время на улучшения, которые приносят пользу законным пользователям (и поощрять их больше покупать ваше приложение).
РЕДАКТИРОВАТЬ Год спустя это по-прежнему (в основном) точный, но для решения новой объявленной сегодня трещины, которая перехватывает, а затем повторно отправляет настоящие квитанции, теперь требуется немного больше работы, необходимой для сервер. (к счастью, если у вас уже установлен сервер проверки, вы сможете это сделать без обновления вашего приложения). Два новых требования:
1) Убедитесь, что идентификаторы продуктов (как идентификатор приложения, так и продукт IAP один) в расшифрованной квитанции, которую вы получаете с сервера Apple, фактически соответствуют продукту, который пользователь покупает.
2) Убедитесь, что идентификатор транзакции в квитанции (или идентификатор транзакции восстановления для квитанции восстановления) никогда не использовался до этого, сохраняя журнал ранее использованных идентификаторов транзакций.
Тем не менее, даже при использовании IAP-трещин для пользователей, не имеющих jailbroken, моя основная точка зрения заключается в том, что это может быть больше проблем, чем стоит - вернуть количество времени, которое вы потратите на внедрение и поддержание полностью незабываемого пакет кода, вам нужно будет получить много дополнительных продаж от людей, которые были, в конце концов, настолько не склонны платить за ваш продукт, что они были готовы значительно скомпрометировать их безопасность iPhone, чтобы этого не было.