我计划实施一些应用内购买项目,并且我想保存购买信息/数据,以便iTunes在我的客户同步时备份所述信息。 Apple提供的文档表明这是可能的,但并没有真正告诉你如何。
我在哪里/如何保存购买历史记录(例如,每个项目的NSString),以便iTunes在下次同步时备份它?
最后,您如何建议我在将所有这些内容上线之前进行测试?
感谢。
P.S。现在我正在使用NSUserDefaults来存储这些信息。
答案 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 配置文件进行测试的更多信息,请阅读本文: