保存用户的硬币数量
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"];
希望对您有所帮助!
虽然我的应用不是游戏,但基于硬币的游戏可以作为一个很好的类比。
在这样的游戏中,用户拥有一定数量的金币,他们可以通过玩游戏或购买 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"];
希望对您有所帮助!