我有一些功能只有在通过应用购买购买后才能解锁。
如果我将标志值存储在NSUserDefaults中以检查是否已购买应用程序,这样可以吗?
通过In App Purchase完成购买后,将标志存储在NSUserDefaults中是否安全?
答案 0 :(得分:32)
不,这是不安全。
内容NSUserDefaults以纯文本格式存储。可以使用iExplorer等工具访问和修改它们。这也适用于没有越狱的设备。
这意味着如果您将购买信息保存在NSUserDefaults中,用户可以在不进行实际购买的情况下解锁您的内容。
要以不容易“破解”的方式保存标记,您可以执行以下操作之一:
保存存储信息的额外盐渍哈希值。使用哈希来验证用户是否未修改信息。您可以找到此概念的实现here。
将标记保存在钥匙串中。在Apple的Keychain Services Programming Guide中阅读更多内容。你可以在GitHub上找到这个概念的几个实现,例如Lockbox
更新:从iOS 8.3开始,对应用程序沙箱的访问受到一定限制。虽然这增加了一些安全性,但我仍然不建议使用NSUserDefaults,因为对于越狱设备,启用了 iTunes文件共享的应用程序,以及运行旧版iOS的设备,仍然可以访问沙箱
答案 1 :(得分:2)
是的,这是最好的方式。因此,您可以通过存储在NSUserDefault中的标记。
但是, 从设备中删除应用程序时,它的值变为FALSE。 所以它会再次要求购买。但是,它不会向用户收取再次购买相同的东西。
干杯。
答案 2 :(得分:1)
是的,这是最好的方法。至少我在我的非消费类应用程序内购买类型存储在NSUSerDefault中。所以它直到现在都是我的魅力。