保存用户的硬币数量

Saving User's Coin Count

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

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

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

我宁愿不让数据公开供用户更改(如果他们可以编辑数据,他们为什么要购买 IAP?)。我查看了 Keychain,它有一个 public 界面来查看和编辑数据,以及 NSUserDefaults,它保存到一个可以轻松更改的 Plist。

我有更好的选择吗,还是我干脆不尝试(就像上面的答案所建议的那样)?

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

这个解决方案非常适合我。试试这个:https://github.com/nielsmouthaan/SecureNSUserDefaults. It will store encrypted bool/string/float/integer in your UserDefaults file. Hopefully this is what you want. Make sure you download and add CocoaSecurity to your project. CocoaSecurity is a required element of SecureNSUSerDefaults, so you do not need to import it into any of your files. You must also download Base64,这是 CocoaSecurity 的必需元素。您还需要将 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"];

希望对您有所帮助!