我创建了一个应用程序,在第一次启动时为用户提供3个硬币。
一旦用户完成3个硬币,他应该通过应用内购买购买无限金币
问题是,如果用户不想购买无限量硬币,他可以删除应用程序,再次安装应用程序,他将再次拥有3个硬币。
他可以永远这样做而无需购买 - 购买。
有一种简单的方法可以防止这种情况吗?即使删除了用户,我怎么知道用户是否在应用程序内完成了硬币?
答案 0 :(得分:2)
您可以通过两种不同的方式处理此问题。
方法1:将标识符存储在KeyChain中
如果用户重置其设备,您将丢失此钥匙串数据。
重置设备后,您将再次提供硬币,因为您的标志/标识符不会出现在钥匙串中。
如果你想避免这种情况,那么你必须采用第二种方法。
方法2:在服务器上存储标识符
而不是将详细信息存储在设备钥匙串上。您必须将其保存在您的服务器上。应用程序首次启动时,您必须检查您的服务器以提供详细信息。
即使用户重置设备
,此方法也始终有效
答案 1 :(得分:1)
您可以从设备钥匙串获取唯一的设备ID并保存到服务器,并在应用首次启动后,您必须检查您的服务器是否已经可以使用此唯一设备ID。
我正在使用Keychain library轻松访问app钥匙串。
您可以使用以下方法获取并检查唯一设备ID
// MARK: - Get UUID from keychain because delete app and reintall changes the UUID.
class var getUniqueDeviceIdentifierAsString : String {
let appname = Bundle.main.infoDictionary![kCFBundleNameKey as String] as! String
var strApplicationUUID: String? = KeychainWrapper.standard.string(forKey: appname)
if strApplicationUUID == nil {
strApplicationUUID = UIDevice.current.identifierForVendor?.uuidString
_ = KeychainWrapper.standard.set(strApplicationUUID!, forKey: appname)
}
return strApplicationUUID!
}
答案 2 :(得分:0)
有几种方法可以实现它:
使用钥匙串存储硬币计数。任何其他本地存储都不太安全,并且不会“存活”应用程序删除。我正在使用KeychainAccess库轻松访问app keychain。
在您的服务器上存储有硬币计数的用户个人资料。此外,您可以验证每个应用程序内购买并验证任何硬币消耗操作,以防止IAP黑客工具,用户配置文件同步中的主要中间攻击等。
答案 3 :(得分:0)
用户可以将值存储在设备的钥匙串中。您可以将该数据保存在手机中的直到他重置所有设置的钥匙串中。我通常使用this库来使用钥匙串存储数据。
但最好使用网络服务保持服务器状态,因为即使您将数据存储在钥匙串中,用户也可以重置设备的所有设置并再次安装应用程序,这样可以再次获得3个硬币。没有后端支持,它无法为此做出完美的解决方案
答案 4 :(得分:0)
一种解决方案是使用设备的钥匙串存储。但如果用户登录其他设备,则此问题仍然存在。您可以使用iCloud钥匙串存储或在服务器上存储必要的参数。使用iCloud钥匙串非常简单可靠
答案 5 :(得分:0)
如果删除应用程序,任何本地数据库,SQLite,核心数据,文件存档,plist将无法生存。 在iOS上重新安装应用后,有三种方法可以获取持久数据:
- 将数据保存在服务器上。但是这种情况只有在用户始终登录帐户时才有效。
- 使用钥匙串存储数据。有很好的Keychain实现,如
JNKeychain
- 使用iCloud。在您的应用中实施CloudKit将使您能够保存数据 对应于以后可以检索的iCloud用户 重新安装。
醇>