我正在开发一个应用程序,该应用程序具有许多可启用某些功能的应用程序商店购买项目。
购买每件商品后,我需要记住它(当然)。我还想将此信息保留在 iCloud 中,以防应用程序被删除或安装在另一台设备上。
什么是最好的数据结构?
可以使用用户默认数据库吗?
重要的是用户将无权更改这些值并自行启用付费功能。
我正在开发一个应用程序,该应用程序具有许多可启用某些功能的应用程序商店购买项目。
购买每件商品后,我需要记住它(当然)。我还想将此信息保留在 iCloud 中,以防应用程序被删除或安装在另一台设备上。
什么是最好的数据结构?
可以使用用户默认数据库吗?
重要的是用户将无权更改这些值并自行启用付费功能。
我使用KeychainItemWrapper
该类将标志存储在钥匙串中。到目前为止,好消息是钥匙串在应用程序删除后仍然存在。如果用户随后在同一设备上重新安装相同的应用程序,钥匙串数据仍然存在。
无需使用 iCloud。如果用户在另一台设备上安装您的应用,您只需在应用中提供“恢复购买”按钮即可。然后调用 Store Kit API 来恢复现有的购买。“In-App Purchasing Programming Guide”涵盖了如何做到这一点。
即使钥匙串中的标志丢失,同样的功能也允许用户恢复他们的购买。
可以使用用户默认数据库吗?
可以,但这不是最好的主意,因为
重要的是用户将无权更改这些值并自行启用付费功能。
并将NSUserDefaults
其内容存储为二进制或纯文本属性列表。在越狱设备上轻松更改。(也可以通过修改 iTunes 备份文件在未越狱的设备上进行更改)。
您可以做的是将它们存储在钥匙串中,尽管钥匙串并不是真正为此设计的(也可以使用 Ptoomey3 很棒的 Kaychain-Dumper 工具将其转储到越狱设备上),或者更好地将其远程存储在您的服务器上并且让您的服务器检查用户购买了什么。
当然,如果不仅是服务器进行检查,例如您不仅根据购买发送或不发送内容,而且您还使用此检查在您的应用程序中执行操作,那么它也可以被黑(谷歌“MobileSubstrate cheat DoodleJump”就是一个很好的例子)。
总而言之:没有绝对安全的系统。