Безопасно ли хранить флаг в NSUserDefaults после совершения покупки через покупку в приложении? - PullRequest
12 голосов
/ 28 июня 2011

У меня есть некоторые функции, которые будут разблокированы только после покупки в приложении покупки.

Это нормально, если я сохраню значение флага в NSUserDefaults, чтобы проверить, было ли приложение куплено или нет?

Безопасно ли хранить флаг в NSUserDefaults после совершения покупки через In App Purchase

Ответы [ 3 ]

33 голосов
/ 26 мая 2013

Нет, это небезопасно .

Содержимое NSUserDefaults хранится в виде простого текста. К ним можно получить доступ и изменить их с помощью таких инструментов, как iExplorer . Это также работает на устройствах, которые не были взломаны.

Это означает, что если вы сохраните информацию о покупке в NSUserDefaults, пользователи смогут разблокировать ваш контент, не совершая фактическую покупку.

Чтобы сохранить флаги так, чтобы их было нелегко «взломать», вы можете сделать одно из следующих действий:

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

  2. Сохраните флаги в цепочке для ключей. Подробнее читайте в Apple Руководство по программированию Keychain Services . Вы можете найти несколько реализаций этой концепции на GitHub, например, Lockbox .

Обновление: Начиная с iOS 8.3, доступ к изолированной программной среде приложения несколько ограничен. Хотя это добавляет некоторую безопасность, я все равно не рекомендую использовать NSUserDefaults, так как доступ к песочнице по-прежнему возможен для взломанных устройств, приложений, в которых включен общий доступ к файлам iTunes , и, конечно, устройств, работающих под управлением старых версий iOS.

2 голосов
/ 28 июня 2011

Да, это лучший способ.Таким образом, вы можете просмотреть флаг, который хранится в NSUserDefault.

Но, когда вы удаляете приложение с устройства, его значение становится ЛОЖНЫМ.Так что он попросит о покупке снова.Но он не будет взимать плату с пользователя за покупку снова.

Приветствия.

1 голос
/ 28 июня 2011

Да, это лучший способ.На правах аренды я хранил в NSUSerDefault свой тип покупки In-app в категории Non-Consumable. Так что до сих пор это работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...