节省用户的硬币数量



虽然我的应用不是游戏,但投币游戏可以作为一个很好的类比。

在这样的游戏中,用户拥有一定数量的货币,他们可以通过游戏玩法或购买IAP来赚取这些货币。主要的问题是安全地存储用户在本地拥有多少硬币。

我知道还有其他类似的问题,比如这个。这个答案基本上是说,试图安全地保存数据是没有用的;只需处理用户可以编辑数据的事实。

我宁愿不把数据放在开放的地方让用户修改(如果他们可以编辑数据,他们为什么要购买IAP?)我已经研究了Keychain,它有一个公共接口来查看和编辑数据,以及NSUserDefaults,它保存到一个可以很容易更改的Plist。

对我来说有没有更好的选择,或者我应该甚至不去尝试(就像上面的答案所建议的那样)?

Edit:该应用程序实际上是一个开发人员工具,具有有限数量的令牌。因为用户都有技术技能,他们中的大多数(我假设)有足够的知识来查找和更改Plist文件或Keychain数据。

这个解决方案对我来说非常有效。试试这个:https://github.com/nielsmouthaan/SecureNSUserDefaults。它将在你的UserDefaults文件中存储加密的bool/string/float/integer。希望这就是你想要的。确保下载并将CocoaSecurity添加到项目中。cocoassecurity是SecureNSUSerDefaults的必需元素,因此您不需要将其导入到任何文件中。您还必须下载Base64,它是cocoassecurity的必需元素。您还需要将Base64添加到项目中,但不需要将其导入到任何文件中。

使用

在任何需要使用加密方法的地方导入头文件

#import <SecureNSUserDefaults/NSUserDefaults+SecureAdditions.h>

然后,设置一个加密密钥,可能在您的awakeFromNib方法:

[[NSUserDefaults standardUserDefaults] setSecret:@"your_secret_goes_here"];

我建议生成由数字和字母组成的随机字符串。然后,您必须将信息存储在UserDefaults文件中。

[[NSUserDefaults standardUserDefaults]
    setSecretObject:@"your_secret_object"
    forKey:@"the_key_your_object_will be_stored_under"];

要检索字符串,使用以下方法:

NSString *retrievedData = [[NSUserDefaults standardUserDefaults]     
    secretStringForKey:@"the_key_your_object_will be_stored_under"];

我希望这对你有帮助!

最新更新