2016-05-19 4 views
2

Я использую VerificationController, предоставляемый Raywenderlich в нескольких моих приложениях, и это было фантастично. Полностью надежный, простой в применении и эффективный. Он работал в трех моих приложениях в течение нескольких месяцев.VerificationController внезапно перестает работать для всех приложений

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

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

Насколько я могу судить, это похоже на вторую из этих строк (VerificationController.m line 158).

require(signature_length > offsetof(struct signature_blob, certificate), outLabel); 
require(signature_blob_ptr->version == 2, outLabel); 
certificate_len = ntohl(signature_blob_ptr->cert_len); 

Какие услужливо прокомментировал «Убедитесь, что блоб подписи достаточно долго, чтобы безопасно извлечь версию и cert_len полей, а затем выполнить проверку вменяемости на полях.» Когда он попадает в строку signature_blob_ptr, он неожиданно переходит к концу функции, что, я полагаю, означает, что она не провела проверку, связанную с номером версии какого-либо ответа от Apple?

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

+0

Вы достигли решения этой проблемы? Im сталкивается с точно такой же ситуацией ... – brbgyn

+1

@brbgyn Я не думаю, что будет решение, к сожалению. Основываясь на приведенном ниже ответе, похоже, что Apple эффективно уничтожил VerificationController в качестве жизнеспособного варианта. Существуют и другие способы проверки квитанций, но ни один из них не является простым или простым. Пока что я только что представил обновления для своих приложений, которые отключили проверку, в то время как я ищу новое решение. Сожалею! – Nerrolken

ответ

1

Поиск «получения подтверждения» на https://forums.developer.apple.com

По-видимому, обновление сертификата просто заставило VerificationController прекратить работу.

Очевидным, но совсем не быстрым, исправить это использование более поздней обработки проверки чеков. См.: https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Introduction.html#//apple_ref/doc/uid/TP40010573-CH105-SW1

Что касается вышеприведенного кода, теперь подпись_blob_ptr-> version == 3. Но включение 3 вместо 2 в код не является исправлением, так как подпись уже не 128 байтов.

+0

Вы упомянули, что эта ссылка НЕ ​​является быстрым решением. Есть ли что-то более быстрое, быстрый вариант, который разработчики indie могут реализовать, рассматривая этот более длинный и лучший метод? – Nerrolken

+0

Я не знаю быстрого решения (например, исправление за 1 день). Это может быть интересно, но я не пробовал: http://stackoverflow.com/questions/19943183/a-complete-solution-to-locally-validate-an-in-app-receipts-and-bundle-receipts -o Одним из лучших подходов, вероятно, является использование Receigen. Но, вероятно, вам понадобится несколько дней, если не более недели, чтобы понять все части, чтобы они работали правильно в вашем приложении. –

Смежные вопросы