在应用购买成功后存储购买数据(osx 应用商店应用)
Posted
技术标签:
【中文标题】在应用购买成功后存储购买数据(osx 应用商店应用)【英文标题】:Storing purchase data after a successful in app purchase (osx app store app) 【发布时间】:2013-06-14 18:02:00 【问题描述】:使用我帖子底部的链接,我为我的 OSX 应用构建了一个基本的应用内购买。基本上我所做的是向用户显示一个用户界面,让他们选择他们想要购买升级(这只是添加更多内容),然后我通过调用 addPayment: 开始交易,我在 paymentQueue:updatedTransactions 中收到交易:和如果是购买交易,我将其发送到提供内容的方法,然后调用 finishTransaction:。
这一切都适用于应用程序的一次使用,但是当我再次启动时,我必须再次购买才能重新启用这些功能(这是有道理的,因为我没有将升级数据存储在任何地方),但是我想知道存储有关购买的数据的最佳方式是什么,以防止用户在购买后被要求再次购买。这是否应该通过收据验证来完成?我找到的所有文档都没有提到这一点。
有用的链接:
In app Purchase walkthrough
Apple's in app purchase documentation
编辑:
我的应用实际上只是试图通过应用内购买来启用内置内容,因此苹果建议使用属性列表:
Apple 建议使用属性列表 (plist) 来跟踪内置功能的产品标识符。内容驱动的应用程序可以使用它来添加新内容,而无需修改应用程序的源代码。
但我想知道如果 plist 文件存储在包中,我该如何编辑它(这导致沙盒认为应用程序已被入侵)。您是否将首选项 plist 存储在容器中?苹果提供的链接应该讨论更多关于更改应用程序首选项链接到 ios 页面的信息,并且该页面上唯一关于首选项的内容是在设置包中。 Implementing Application Preferences”
应用程序首选项方法是否只能在 IOS 上使用?将升级数据放入设置包的正确位置是否正确?
【问题讨论】:
【参考方案1】:对于启用附加内容的购买,Apple 建议使用基于服务器的收据验证设置,如下所述:
http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/APIOverview/OverviewoftheStoreKitAPI.html#//apple_ref/doc/uid/TP40008267-CH100-SW12
“Apple 建议您从服务器检索产品标识符,而不是将它们包含在属性列表中。这使您可以灵活地添加新产品而无需更新您的应用程序。
在服务器模型中,您的应用程序检索与交易关联的签名收据并将其发送到您的服务器。然后,您的服务器可以验证收据并对其进行解码,以确定将哪些内容交付给您的应用程序。 “验证商店收据”中详细介绍了此过程。
服务器模型有额外的安全性和可靠性问题。您应该测试整个环境的安全威胁。安全编码指南提供了更多建议。
虽然可以使用 Store Kit 的内置功能恢复非消耗性产品,但非续订订阅必须由您的服务器恢复。您有责任记录有关非续订订阅的信息并将其恢复给用户。或者,您的服务器也可以跟踪消耗品。例如,如果您的消耗品是您的服务器提供的服务,您可能希望用户在多个设备上检索该请求的结果。”
您可以为用户创建一个 UUID 并将其存储在应用的首选项中。这样做的好处是,当用户备份或恢复他们的设备时,uuid 会被备份。如果它是一个通用应用程序,它也可以很容易地在 iCloud 上同步。然后,服务器可以将该 UUID 链接到所进行的购买并交付该用户购买的内容。您可能希望包含额外的安全协议,以减少不道德用户的任何 UUID 欺骗,但除非内容非常有价值,否则恕我直言,这通常比它值得付出更多的努力。
【讨论】:
感谢您的回复。从我对您提供的链接的阅读看来,我的应用程序应该使用属性列表方法(因为我的应用程序正在尝试提供内置内容)。你同意?查看我的编辑 老实说,如果它只是一个(或几个)IAP 选项并且它是一个通用应用程序,我会使用这样的键值存储:developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/… 这样 iCloud会将购买同步到其他设备。否则,我可能会把它扔进我的 NSUserDefault 商店。我不会把它放在设置包中,因为它应该用于在 iOS 设置对话框中更改的设置。 哦,好吧,我开始看到了。所以 NSUserDefault 选项听起来对我来说效果很好,除非用户将应用程序下载到另一台设备上,否则它无法知道他们已经购买了它?这是他的正确。再次感谢! 是的,没错。这就是为什么他们建议使用服务器端方法或做一些在 iCloud 上正确同步的事情。服务器端解决方案将是黄金标准,因为它可以让您更好地控制您的应用程序可以下载和不能下载的内容,并且如果他们由于某种原因丢失了内容,您可以修复某人的 IAP(只要您可以检索 UUID你已经创建了应用程序)。如果您正在寻找答案,请务必接受!以上是关于在应用购买成功后存储购买数据(osx 应用商店应用)的主要内容,如果未能解决你的问题,请参考以下文章