iOS - 如何保存应用内购买数据?

时间:2010-12-28 14:44:25

标签: iphone objective-c ios in-app-purchase

我计划实施一些应用内购买项目,并且我想保存购买信息/数据,以便iTunes在我的客户同步时备份所述信息。 Apple提供的文档表明这是可能的,但并没有真正告诉你如何。

我在哪里/如何保存购买历史记录(例如,每个项目的NSString),以便iTunes在下次同步时备份它?

最后,您如何建议我在将所有这些内容上线之前进行测试?

感谢。

P.S。现在我正在使用NSUserDefaults来存储这些信息。

4 个答案:

答案 0 :(得分:9)

NSUserDefaults适用于存储此类内容,但您还应该使用StoreKit的“检查购买商品”功能 - 许多使用应用内购买的应用都会在某处检查“已购买” “可用产品的状态,并在应用程序中重新启用它们,以防用户卸载然后重新安装应用程序或将其安装在其他设备上。

可以使用沙盒环境测试应用内购买 - iTunes Connect将允许您设置测试iTunes Store帐户,该帐户可以免费访问您应用的所有应用内购买。

答案 1 :(得分:4)

实际上NSUserDefaults位于

之下
<Application_Home>/Library/Preferences

iTunes将备份Library目录。

保存应用内购买数据的另一种方法(因为它很少)是将其保存到钥匙串。因为钥匙串是安全的,并且会在删除应用程序时保留。因此,当用户再次安装应用程序时,用户可以立即购买。请检查此链接:Lockbox: Easily Secure Your App’s Sensitive Data

答案 2 :(得分:0)

如前所述,您可以使用 UserDefaults 来实现此目的,但正如 Apple 所说,它也可以使用 iCloud 和 NSUbiquitousKeyValueStore 来实现

https://developer.apple.com/documentation/storekit/in-app_purchase/persisting_a_purchase

现在可以使用 .storekit 配置文件在 Xcode 中轻松完成测试。

https://developer.apple.com/documentation/storekit/in-app_purchase/testing_in-app_purchases_in_xcode

答案 3 :(得分:0)

虽然 NSUserDefaults 可用于存储购买历史记录,但黑客有可能对其进行修改并免费访问付费功能。

钥匙串稍微好一点,因为它更持久(在删除并重新安装应用程序后仍然存在),但仍然有可能真正专门的黑客将数据添加到钥匙串,使您的应用程序认为是购买已经做出来了。

您还可以将购买信息写入您存储在应用程序中的某个加密文件中,该文件也会与应用程序一起备份,并且可能更加灵活。

最好的方法是将购买数据存储在对您的应用最方便的地方,然后还要检查存储在 Bundle.main.appStoreReceiptURL 中的应用的收据以确保您存储的内容,Apple 也认为有已购买。

该收据应该通过您自己的服务器发送到 Apple,Apple 从该 appStoreReceiptURL 中存储的数据返回收据 JOSN。

对于测试,虽然您也可以使用沙盒 iTunes 帐户在设备上进行测试,但 Xcode 12 引入的一种较新方法是使用 StoreKit 配置,您可以在其中定义所有产品,而无需先在 appStoreConnect 中输入它们。当您运行时,它将在本地处理购买交易,包括在模拟器内(iTunes 沙盒无法实现)。

有关使用 Xcode App Store 配置文件进行测试的更多信息,请阅读本文:

https://www.namiml.com/blog/inapp-purchases-ios14-simulator