Я прочитал много документов и кодов, которые теоретически подтвердят получение и / или получение в приложении.
Учитывая, что мои знания о SSL, сертификатах, шифровании и т. Д. Почти равны нулю, все объяснения, которые я прочитал, как и это многообещающее , я нашел трудным для понимания.
Они говорят, что объяснения неполные, потому что каждый человек должен выяснить, как это сделать, или хакерам будет легко создать приложение-взломщик, которое сможет распознавать и идентифицировать шаблоны и исправлять приложение. Хорошо, я согласен с этим до определенного момента. Я думаю, что они могли бы полностью объяснить, как это сделать, и поставить предупреждение «изменить этот метод», «изменить этот другой метод», «скрыть эту переменную», «изменить имя того и того» и т. Д.
Может ли какая-нибудь добрая душа быть достаточно любезной, чтобы объяснить, как ЛОКАЛЬНО проверять, связывать квитанции и квитанции о покупках в приложении на iOS 7, поскольку мне пять лет (хорошо, сделайте это 3), сверху вниз, ясно?
Спасибо!!!
Если у вас есть версия, работающая с вашими приложениями, и вы опасаетесь, что хакеры увидят, как вы это сделали, просто измените свои чувствительные методы перед публикацией здесь. Запутывайте строки, меняйте порядок строк, изменяйте то, как вы делаете циклы (от использования for до блокировки перечисления и наоборот) и тому подобное. Очевидно, что каждый, кто использует код, который может быть размещен здесь, должен делать то же самое, чтобы не рискнуть быть легко взломанным.
Ответы:
Вот пошаговое руководство по решению этой проблемы в библиотеке покупок в приложении RMStore . Я объясню, как проверить транзакцию, которая включает в себя проверку всей квитанции.
С одного взгляда
Получить квитанцию и подтвердить транзакцию. Если это не удалось, обновите квитанцию и попробуйте снова. Это делает процесс проверки асинхронным, поскольку обновление чека является асинхронным.
Из RMStoreAppReceiptVerifier :
Получение данных чека
Квитанция находится
[[NSBundle mainBundle] appStoreReceiptURL]
и фактически является контейнером PCKS7. Я отстой в криптографии, поэтому я использовал OpenSSL, чтобы открыть этот контейнер. Другие, очевидно, сделали это исключительно с помощью системных платформ .Добавление OpenSSL в ваш проект не тривиально. RMStore вика должна помочь.
Если вы решите использовать OpenSSL для открытия контейнера PKCS7, ваш код может выглядеть следующим образом. Из RMAppReceipt :
Мы рассмотрим детали проверки позже.
Получение полей чека
Квитанция выражается в формате ASN1. Он содержит общую информацию, некоторые поля для целей проверки (мы вернемся к этому позже) и конкретную информацию о каждой применимой покупке в приложении.
Опять же, OpenSSL приходит на помощь, когда дело доходит до чтения ASN1. Из RMAppReceipt , используя несколько вспомогательных методов:
Получение покупок в приложении
Каждая покупка в приложении также в ASN1. Синтаксический анализ очень похож на анализ общей информации о получении.
Из RMAppReceipt , используя те же вспомогательные методы:
Следует отметить, что некоторые покупки в приложении, такие как расходные материалы и невозобновляемые подписки, будут отображаться только один раз в квитанции. Вы должны проверить их сразу после покупки (опять же, RMStore поможет вам в этом).
Проверка с первого взгляда
Теперь мы получили все поля из квитанции и все покупки в приложении. Сначала мы проверяем саму квитанцию, а затем просто проверяем, содержит ли квитанция продукт транзакции.
Ниже приведен метод, который мы перезвонили в начале. Из RMStoreAppReceiptVerificator :
Проверка получения
Проверка самой квитанции сводится к:
5 шагов в коде на высоком уровне из RMStoreAppReceiptVerificator :
Давайте углубимся в шаги 2 и 5.
Проверка подписи квитанции
Когда мы извлекали данные, мы просматривали проверку подписи квитанции. Квитанция подписана с помощью корневого сертификата Apple Inc., который можно загрузить из корневого центра сертификации Apple . Следующий код принимает контейнер PKCS7 и корневой сертификат в качестве данных и проверяет их соответствие:
Это было сделано еще в начале, до того как квитанция была обработана.
Проверка получения хэша
Хэш, включенный в квитанцию, представляет собой SHA1 идентификатора устройства, некоторое непрозрачное значение, включенное в квитанцию, и идентификатор пакета.
Это как проверить хэш чека на iOS. Из RMAppReceipt :
И это суть этого. Я мог что-то упустить здесь или там, поэтому я могу вернуться к этому посту позже. В любом случае, я рекомендую просмотреть полный код для более подробной информации.
источник
Я удивлен, что никто не упомянул здесь Receigen . Это инструмент, который автоматически генерирует запутанный код подтверждения получения, каждый раз другой; он поддерживает как графический интерфейс, так и работу в командной строке. Настоятельно рекомендуется.
(Не связан с Receigen, просто счастливый пользователь.)
Я использую Rakefile, как этот, чтобы автоматически перезапускать Receigen (потому что это нужно делать при каждом изменении версии), когда я печатаю
rake receigen
:источник
Это версия Swift 4 для проверки квитанции о покупке в приложении ...
Давайте создадим перечисление для представления возможных ошибок проверки квитанции
Затем давайте создадим функцию, которая проверяет квитанцию, она выдаст ошибку, если не сможет ее проверить.
Давайте использовать эту вспомогательную функцию, чтобы получить дату истечения срока действия конкретного продукта. Функция получает ответ JSON и идентификатор продукта. Ответ JSON может содержать информацию о нескольких поступлениях для разных продуктов, поэтому он получает последнюю информацию для указанного параметра.
Теперь вы можете вызвать эту функцию и обработать возможные ошибки
Account tab
Do Sign in
Open iTune Connect
Open My App
Open Feature Tab
Open In App Purchase
Click at the right side on 'View Shared Secret'
At the bottom you will get a secrete key
Надеюсь, что это поможет каждому, кто хочет это в быстрой версии.
источник