使用帖子底部的链接,我已经为我的OSX应用程序构建了一个基本的应用内购买。基本上我所做的是显示用户选择他们想要购买升级的UI(只添加更多内容),然后我通过调用addPayment来启动交易:我在paymentQueue:updatedTransactions中收到交易:如果是购买交易,我将其发送到提供内容的方法,然后调用finishTransaction:。
这一切只能在应用程序中使用,但是当我再次启动时,我将不得不再次购买以重新启用这些功能(这是有道理的,因为我没有将升级数据存储在任何地方),但是我想知道存储购买数据的最佳方法是什么,以防止用户在购买后再次购买。这是否通过收据验证来完成?我找到的所有文档都没有谈到这个问题。
有用的链接:
Apple's in app purchase documentation
编辑:
我的应用程序实际上只是尝试通过应用内购买启用内置内容,因此似乎使用属性列表是Apple建议的内容:
Apple建议使用属性列表(plist)来跟踪内置功能的产品标识符。内容驱动的应用程序可以使用它来添加新内容,而无需修改应用程序的源代码。
但我想知道如果plist文件存储在bundle中,我怎么能编辑plist文件(这导致沙盒认为应用程序已被盗用)。您是否将首选项plist存储在容器中?苹果提供的链接应该讨论更多关于更改应用程序首选项链接到IOS页面的信息,该页面上关于首选项的唯一内容是在设置包中。 Implementing Application Preferences”
应用程序首选项方法是否仅用于IOS?是否将升级数据放入设置包中的正确位置?
答案 0 :(得分:1)
对于启用其他内容的购买,Apple建议使用基于服务器的收据验证设置,如下所示:
“Apple建议您从服务器检索产品标识符,而不是将其包含在属性列表中。这使您可以灵活地添加新产品而无需更新应用程序。
在服务器模型中,您的应用程序检索与事务关联的签名收据并将其发送到您的服务器。然后,您的服务器可以验证收据并对其进行解码,以确定要向您的应用程序提供的内容。 “验证商店收据”中详细介绍了此过程。
服务器型号具有额外的安全性和可靠性问题。您应该测试整个环境是否存在安全威胁。安全编码指南提供了其他建议。
虽然可以使用Store Kit的内置功能恢复非耗材产品,但您的服务器必须恢复非续订订阅。您负责记录有关非续订订阅的信息并将其还原给用户。可选地,您的服务器也可以跟踪消耗品。例如,如果您的消费品是服务器提供的服务,您可能希望用户在多个设备上检索该请求的结果。“
您可以为用户创建UUID并将其存储在应用程序的首选项中。这样做的好处是,当用户备份或恢复其设备时,将备份uuid。如果它是一个通用的应用程序,它也可以很容易地跨iCloud同步。然后,服务器可以将该UUID链接到所进行的购买并传递该用户购买的内容。您可能希望包含其他安全协议以减少不道德用户的任何UUID欺骗,但除非内容非常有价值,否则通常需要付出的努力比恕我直言。