在App Store应用的OSX中,成功完成应用内购买后,需要存储购买数据。

5

我在我的OSX应用程序中使用底部的链接构建了一个基本的应用内购买。基本上,我显示一个UI供用户选择购买升级(仅添加更多内容),然后通过调用addPayment:开始交易,我在paymentQueue:updatedTransactions:中接收到交易,如果是购买交易,则将其发送到提供内容的方法,然后调用finishTransaction:。

所有这些都可以在应用程序的单个使用中工作,但当我再次启动应用程序时,我必须再次执行购买操作以重新启用那些功能(这很合理,因为我没有在任何地方存储升级数据),但我想知道防止用户在已经购买后被要求再次购买的最佳方法是什么。这是否应该通过收据验证来完成?我找到的文档都没有多少讨论。

有用的链接:

应用内购买全面指南

苹果公司的应用内购买文档

编辑:

我的应用程序只是尝试通过应用内购买启用内置内容,因此似乎使用属性列表(plist)是苹果建议的方法:

Apple建议使用属性列表(plist)来跟踪您内置功能的产品标识符。基于内容的应用程序可以使用它来添加新内容,而无需修改应用程序源。

但我想知道如果plist文件存储在捆绑包中,如何编辑它(这会导致沙箱认为应用程序已被破坏)。您是否将首选项plist存储在容器中?苹果提供的链接被认为会更多地讨论更改应用程序首选项,但该链接指向了一个IOS页面,该页面上关于首选项的唯一内容位于设置束中。 实现应用程序首选项"

应用程序首选项方法只能在IOS上使用吗?将升级数据放置在设置束中的位置正确吗?

1个回答

4
对于启用额外内容的购买,苹果建议使用基于服务器的收据验证设置,如此处所述:

http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/APIOverview/OverviewoftheStoreKitAPI.html#//apple_ref/doc/uid/TP40008267-CH100-SW12

"苹果建议您从服务器检索产品标识符,而不是将它们包含在属性列表中。这样可以使您灵活添加新产品,而无需更新应用程序。
在服务器模型中,您的应用程序检索与交易相关联的已签名收据并将其发送到您的服务器。然后,您的服务器可以验证该收据并解码以确定要向您的应用程序传递哪些内容。这个过程在“验证商店收据”中详细介绍。
服务器模型具有额外的安全性和可靠性问题。您应该测试整个环境以防止安全威胁。Secure Coding Guide提供了其他建议。
虽然 Store Kit 的内置功能可以恢复非消耗品,但非续订订阅必须由您的服务器进行恢复。您需要记录有关非续订订阅的信息并将其恢复给用户。可选地,您的服务器也可以跟踪可消耗产品。例如,如果您的可消耗产品是由您的服务器提供的服务,则可能希望用户在多个设备上检索该请求的结果。"
您可以为用户创建一个UUID并将其存储在应用程序的首选项中。这样做的优点是,当用户备份或恢复其设备时,UUID会得到备份。如果它是通用应用程序,则还可以轻松同步到iCloud上。服务器可以将该UUID链接到所购买的项目,并提供由该用户购买的内容。您可能需要包括其他安全协议以减少不良用户伪造UUID的可能性,但除非内容非常有价值,否则我认为这通常会费更多功夫。

感谢您的回复。根据您提供的链接,我认为我的应用程序应该使用属性列表方法(因为我的应用程序正在尝试提供内置内容)。您同意吗?请查看我的编辑。 - Mike2012
1
说实话,如果只有一个(或几个)IAP选项,并且它是一个通用应用程序,我会使用像这样的键值存储:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/UserDefaults/StoringPreferenceDatainiCloud/StoringPreferenceDatainiCloud.html#//apple_ref/doc/uid/10000059i-CH7-SW1 这样iCloud就可以将购买同步到其他设备上。否则,我可能会把它放在我的NSUserDefault存储中。我不会把它放在设置包中,因为那应该是用于在iOS设置对话框中更改设置。 - JiuJitsuCoder
哦,好的,我开始明白了。所以NSUserDefault选项听起来很适合我,除非用户将应用程序下载到另一台设备上,否则它就无法知道他们已经购买了它?这是正确的。再次感谢! - Mike2012
1
是的,没错。这就是为什么他们建议采用服务器端方法或者做一些能够在iCloud上进行正确同步的东西。服务器端解决方案将是黄金标准,因为它将允许您更多地控制应用程序可以下载和不能下载的内容,并且如果某人由于某种原因丢失了内容,您可以修复他们的IAP(只要您可以检索到您的应用程序创建的UUID)。如果这正是您想要的答案,请务必接受它! - JiuJitsuCoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接