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

Код подтверждения покупки Mac App Store?

Хотите узнать, есть ли у кого-нибудь учебник или рабочий код для подтверждения проверки поступления в Mac App Store? Об единственных ссылках, которые мне удалось найти до сих пор, - это звездная документация Apple по этой теме и один проект с открытым исходным кодом, который компилирует, но не имеет большого количества встроенных комментариев, поэтому трудно понять, если вы не криптоват.

Документы Apple только для зарегистрированных разработчиков:

https://developer.apple.com/devcenter/mac/documents/validating.html

Roddi ValidateStoreReceipt (выглядит многообещающим, но редко документированным):

https://github.com/roddi/ValidateStoreReceipt

Также интересно, почему Apple не просто предоставляет рабочий код для проверки?

Любые другие хорошие ссылки там?

4b9b3361

Ответ 1

Трудно предоставить общее решение для проверки поступления в Mac App Store, главным образом потому, что это очень чувствительный фрагмент кода, который должен быть трудно обойти (см. Документация Apple).

Эти проекты GitHub - очень хорошие отправные точки, чтобы узнать, какие шаги должны быть выполнены при проверке получения:

Как только вы поняли, что нужно сделать, вот несколько советов:

  • Не используйте классы или методы Objective-C. Objective-C содержит много метаданных, и его динамический характер предоставляет его инъекции времени выполнения.
  • Используйте только вызовы функций C. Даже если вам нужно больше строк кода с базой CoreFoundation, вы можете отлично делать то, что может сделать инфраструктура Foundation (NSString, NSArray, NSDictionary,...).
  • Не связывайте динамически с библиотекой OpenSSL, поскольку она устарела в Mac OS X Lion. Если вы хотите пойти с OpenSSL, свяжите его статически, чтобы иметь последнюю версию.
  • Используйте системные функции для криптографии. Mac OS X поставляется с эквивалентными функциями с 10,5. Например, чтобы вычислить хэш SHA-1, вы можете использовать функцию CC_SHA1.
  • Не помещайте строки в текст в свой код. Кодировать их или шифровать. Если вы этого не сделаете, вы дадите подсказку о местоположении вашего кода.
  • Не используйте числовые константы в коде. Вычислите их во время выполнения, с некоторыми простыми операциями (+, -,/или *). Опять же, если вы этого не сделаете, вы дадите намек на расположение вашего кода.
  • Избегайте простых тестов для проверки путем вложения ваших тестов и вызова NSApplicationMain в сложный цикл.
  • Избегайте прямого вызова NSApplicationMain. Используйте указатель функции, чтобы скрыть вызов. Если вы этого не сделаете, вы дадите подсказку о местоположении вашего кода.
  • Для каждой версии вашего приложения немного измените код проверки, чтобы он никогда не был таким же.

Помните, что проверка валидации необходима и не проста, как кажется. Это может потребовать много времени, которое вы можете потратить на ваше приложение.

Поэтому я предлагаю вам взглянуть на это приложение: Receigen (Отказ от ответственности: я разработчик этого приложения).

Ответ 2

Чтобы проверить действительную квитанцию ​​после тестирования, измените эту строку кода в файле main.m:

if (!validateReceiptAtPath(@"~/Desktop/receipt"))

к

#ifdef USE_SAMPLE_RECEIPT   // defined for debug version
    NSString *pathToReceipt = @"~/Desktop/receipt";
#else
    NSString *pathToReceipt = [[[NSBundle mainBundle] bundlePath]
        stringByAppendingPathComponent:@"Contents/_MASReceipt/receipt"];
#endif  
    if (!validateReceiptAtPath(pathToReceipt))
        exit(173); //receipt did not validate

и в настройках вашего компилятора "Другие флаги C" для вашей конфигурации отладки должны включать -DUSE_SAMPLE_RECEIPT

любезность http://jesusagora.org/groups/futurebasic/0::53562:get:1read.html

Ответ 3

Обязательно проверьте, что вы проверяете квитанцию ​​для своего приложения. Легко сделать все криптографию и проверку подписей за неправильную квитанцию.

Смотрите http://pastebin.com/1eWf9LCg, где, похоже, Angry Birds пропустили этот бит и оставили их открытыми для людей, заменяющих квитанцию ​​из бесплатного приложения.

Алан Кватермейн также имеет код, чтобы сделать это на github. https://github.com/AlanQuatermain/mac-app-store-validation-sample

Его нельзя использовать как-чтобы избежать автоматического удаления.

Ответ 4

Я рассмотрел код Alan Quartermain, и он выглядит хорошо. Что-то о чем подумать:

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

Когда разработчик отправляет приложение в хранилище для утверждения, подписывающие сертификаты выглядят следующим образом:

3rd Party Mac Developer Application: me
Apple Worldwide Developer Relations Certification Authority
Apple Root CA

После того, как приложение доставляется из магазина приложений конечным пользователям, подписывающие сертификаты выглядят следующим образом:

Apple Mac OS Application Signing
Apple Worldwide Developer Relations Certification Authority
Apple Root CA

Кроме того, я предлагаю только выйти (173), когда квитанция отсутствует, но все остальное в порядке.

Ответ 5

Вы можете попробовать NPReceiptVerification. Это самый простой способ добавить подтверждение квитанции в ваше приложение. Вы просто добавляете файлы классов в свой проект, устанавливаете идентификатор версии и пакета, а все остальное обрабатывается автоматически.

Ответ 6

Я бы предложил реализовать процедуры проверки кода как функции C, а не методы ObjC.

Этот метод затрудняет поиск кода проверки чеков, так как меньше имен методов компилируется в двоичный файл.

Ответ 7

Вы можете обратиться к RVNReceiptValidation, которую легко реализовать. Просто вы должны установить идентификатор Bundle в файле RVNReceiptValidation.m и версии вашего приложения. Не забудьте получить квитанцию ​​из яблока, которую вы должны запустить приложение из Finder. Этот класс также помогает в реализации покупки InApp.

Ответ 8

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

Все, что сказал, решительный взломщик, вероятно, собирается обойти любую защиту от копирования, которую вы создали, независимо от того, что вы делаете. Игровая индустрия (например) тратит много времени, пытаясь защитить свое программное обеспечение, и трещины версии, как представляется, всегда доступны.

Ответ 9

При создании образца квитанции из Apple Docs не забудьте добавить лишние символы после "end", иначе uudecode завершится с ошибкой.

Ответ 10

Да, в своих документах говорится: "Важно, чтобы вы использовали решение, уникальное для вашего приложения".

Ответ 11

Даже с помощью NPReceiptValidation вы все равно должны проверить безопасность своего пакета приложений, включая сертификаты подписи. Это описано в рекомендациях WWDR для разработчиков.

Решение: http://itunes.apple.com/us/app/apptight-pro-app-store-code/id427083596?mt=12

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

Здесь еще один инструмент для помощи в анализе покупки In-App:

http://itunes.apple.com/us/app/pkcs-7viewer/id547539804?mt=12

Ответ 12

roddi ValidateStoreReceipt работал раньше, но он больше не работает. Я написал сообщение в блоге об этом решении: http://vinceyuan.blogspot.com/2012/07/validate-mac-app-store-receipt-2012.html

Скопировано здесь: Код roddi все еще работает. Вам не нужно его менять. (Просто нужно получить последнюю версию) Выполните следующие действия (требуется интернет):

  • Выход из приложения Mac App Store.
  • Удалите флаг USE_SAMPLE_RECEIPT из настроек проекта → Макросы препроцессора.
  • Скомпилируйте свой проект
  • Найти это приложение в Finder
  • Дважды щелкните его в Finder для запуска. Не запускайте его в Xcode.
  • ОС попросит вас войти в систему с вашим Apple ID. Не входите в свою реальную учетную запись iTunes. Вам необходимо войти в систему с помощью тестовой учетной записи. Найдите его или создайте на веб-сайте iTunesconnect.
  • OS скажет что-то вроде "Ваше приложение сломано. Загрузите его в App Store". Игнорируйте это сообщение. Если вы "Покажите содержимое пакета" этого приложения в Finder, вы увидите, что есть файл _MASReceipt/receipt. ОС установила квитанцию ​​о разработке. Нам больше не понадобится старая квитанция. Вот почему мы удаляем флаг отладки USE_SAMPLE_RECEIPT.

Готово. Теперь вы можете отлаживать свое приложение.