Нужно ли проверять/обновлять квитанцию ​​магазина приложений при запуске в iOS?

документы Apple при проверке квитанции говорят о выполнении подтверждение получения сразу после запуска. Это сводится к проверке данных по пути, возвращаемому [[NSBundle mainBundle] appStoreRecieptURL], обновлению через SKReceiptRefreshRequest, если их там нет, и их проверке. Вышеупомянутые документы относятся как к iOS, так и к macOS.

Действительно ли это необходимо для iOS? Если да, то почему? Это сделано для того, чтобы пользователи не могли использовать мое приложение на взломанном устройстве или без покупки его в магазине приложений (в этом случае мне, вероятно, все равно, бесплатно ли мое приложение)? Или это влияет на другие операции, такие как восстановление или проверка покупок в приложении? Например, должны ли уже быть данные квитанции, чтобы подтвердить транзакцию для покупки в приложении?

Примечание. Я не использую подписки в приложении. У меня есть покупки в приложении, но я не использую квитанции от них после их проверки и записи покупки на стороне сервера.


person Tom Hamming    schedule 05.10.2016    source источник
comment
вам необходимо это делать, это необязательно и может быть сделано на iOS7+; внедрение проверки является чисто финансовым решением, и даже если вы ее подтверждаете, вам рекомендуется не отключать содержимое в случае сбоя, поскольку проверка может завершиться ошибкой в ​​стандартной среде в любое время (например, в случае без связи), что может испортить впечатление ваших потребителей; в целом, выполнение проверки на практике имеет смысл на OSX.   -  person holex    schedule 17.10.2016
comment
@holex, ты можешь сделать это ответом?   -  person Tom Hamming    schedule 24.10.2016
comment
нет проблем, я просто сделал это, как вы просили.   -  person holex    schedule 25.10.2016
comment
stackoverflow.com/questions/12738061/   -  person pkamb    schedule 07.11.2019


Ответы (5)


вам необходимо это делать, это необязательно и может быть сделано на iOS7+, если вы заинтересованы в этом.

вкратце, реализация проверки является чисто финансовым решением, и даже если вы проверяете рецепты, вам рекомендуется не отключать контент в случае сбоя, поскольку проверка может завершиться ошибкой в ​​стандартной среде в любое время (например, в случай отсутствия связи), и такая чрезмерная реакция может испортить впечатление ваших потребителей.


в целом, выполнение проверки имеет смысл на OSX на практике, когда вам разрешено отключать контент в случае сбоя, независимо от причины; но если вы чувствуете, что у вас больше потребителей, чем предполагает ваш доход, или количество украденного контента намного превышает вашу маржу, возможно, стоит сделать это и на iOS.


ПРИМЕЧАНИЕ. в целом вы можете прочитать больше о технических деталях проверки получения в Документация Apple.

person holex    schedule 25.10.2016
comment
Не могли бы вы дать мне предложение по этому поводу? stackoverflow.com/ вопросы/47712225/ - person Siddharth; 09.12.2017

Простой ответ на ваш вопрос: НЕТ, в этом нет необходимости.

Вот подробное объяснение для вас.

  1. Согласно документации Apple здесь, Apple предоставила два метода проверки квитанций, они даются только в качестве руководства, чтобы предотвратить запуск неавторизованных копий вашего приложения. Для получения дополнительных рекомендаций Apple указала на руководство по обзору Apple.
  2. В рекомендациях по обзору здесь Apple не упоминает ничего, связанного с к проверке квитанций в обязательном порядке.

Если вообще проверка квитанции является обязательной, Apple предоставила бы простой API для ее проверки.

Titbit: вы можете увидеть много отказов, когда дело доходит до проверки квитанций в магазине приложений. Но все эти проблемы связаны с тем, что проверка квитанции не выполняется должным образом.

Но мои личные рекомендации будут отличаться от приведенного выше ответа. Первое, что вы должны рассмотреть, это «Никогда не недооценивайте хакеров». Проверьте квитанции несколько раз, кроме запуска приложения. Прочитайте эту статью для получения дополнительной информации.

person Prav    schedule 24.10.2016
comment
Apple would have provided a simple API - нельзя. Вызов проверки получения этого simple api можно исправить и, таким образом, обойти. Для квитанций нет надежного кода проверки, но хорошая защита может быть получена путем запутывания логики, и это должно отличаться от приложения к приложению и не должно быть известно публично. Таким образом, не может быть Apple API. - person Vikram Rao; 14.05.2017

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

Хотя вы можете запросить квитанцию ​​для получения информации о IAP, на самом деле проще (и требуется для проверки приложения) где-нибудь дать кнопку для «восстановления предыдущих покупок» и позвонить

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

Это также лучший UX для пользователя, который может запрашивать свой Apple ID и пароль после нажатия кнопки «восстановить покупки», а не необъяснимо при запуске приложения.

person Daniel Broad    schedule 19.10.2016

Причины, которые я бы назвал:

  1. Пользователь может изменить свой продукт, если вы используете группы подписки вне вашего приложения.
  2. Подписка с автоматическим продлением может быть продлена за пределами вашего приложения.
  3. Приложение не получает транзакции, инициированные вне приложения, пока приложение не будет перезапущено.
  4. Пользователь может совершать покупки на другом устройстве, используя тот же идентификатор AppleID, находясь вне вашего приложения на текущем устройстве.

В нашем appDelegate:application didFinishLaunchingWithOptions мы инициализируем класс, который вызывает [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; отслеживать покупки, инициированные из приложения.

person iCyberPaul    schedule 18.10.2016
comment
эти «причины» кажутся оправдывающими необходимость восстановления iAP, но не необходимостью фактической проверки квитанции. - person holex; 18.10.2016
comment
Что значит за пределами вашего приложения? - person John Bachir; 09.06.2017
comment
«Вне вашего приложения» означает, что приложение не находится на переднем плане. - person iCyberPaul; 12.06.2017
comment
Как это может произойти? @iCyberPaul? - person cvdogan; 09.08.2017
comment
В iTunes на другом устройстве. - person iCyberPaul; 09.08.2017

Это не обязательно, но полезно по следующим причинам:

  1. Вы всегда получаете определенный набор купленных продуктов и не требуете от пользователя ручного восстановления продуктов.

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

  3. Гораздо проще вычислить дату истечения срока действия для автоматического продления подписки с помощью рецепта.

person DrMickeyLauer    schedule 28.08.2017