在应用程序购买成功后存储购买数据(osx 应用程序商店应用程序)

Mik*_*012 5 in-app-purchase mac-app-store

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

这一切都适用于应用程序的单次使用,但是当我再次启动时,我将不得不再次购买才能重新启用这些功能(这是有道理的,因为我没有将升级数据存储在任何地方),但我想知道存储有关购买的数据的最佳方法是什么,以防止用户在购买后被要求再次购买。这是否应该通过收据验证来完成?我发现的所有文档都没有对此进行过多讨论。

有用的网址:

应用内购买演练

Apple 的应用内购买文档

编辑:

我的应用程序实际上只是尝试通过应用程序内购买启用内置内容,因此似乎使用属性列表是 Apple 建议的内容:

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

但我想知道如果 plist 文件存储在包中,我该如何编辑它(这导致沙箱认为该应用程序已被入侵)。您是否将首选项 plist 存储在容器中?苹果给出的链接应该讨论更多关于更改应用程序首选项链接到 IOS 页面的内容,该页面上唯一关于首选项的内容是在设置包中。 实施应用程序首选项”

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

Jiu*_*der 4

对于启用附加内容的购买,Apple 建议使用基于服务器的收据验证设置,如下所述:

\n

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

\n
\n

“Apple 建议您从服务器检索产品标识符,而不是将它们包含在属性列表中。这使您可以灵活地添加新产品,而无需更新应用程序。

\n

在服务器模型中,您的应用程序检索与交易关联的签名收据并将其发送到您的服务器。然后,您的服务器可以验证收据并对其进行解码,以确定将哪些内容传送到您的应用程序。\xe2\x80\x9c验证商店收据中详细介绍了此过程。\xe2\x80\x9d

\n

服务器模型还有额外的安全性和可靠性问题。您应该测试整个环境是否存在安全威胁。安全编码指南提供了额外的建议。

\n

尽管可以使用 Store Kit 的内置功能恢复非消耗性产品,但非续订订阅必须由您的服务器恢复。您负责记录有关非续订订阅的信息并将其恢复给用户。或者,您的服务器也可以跟踪消耗品。例如,如果您的消费品是服务器提供的服务,您可能希望用户在多个设备上检索该请求的结果。”

\n
\n

您可以为用户创建一个 UUID 并将其存储在应用程序的首选项中。这样做的优点是,当用户备份或恢复其设备时,uuid 也会被备份。如果它是通用应用程序,它还可以轻松地在 iCloud 上同步。然后,服务器可以将该 UUID 链接到所做的购买并交付该用户购买的内容。您可能希望包含额外的安全协议来减少不择手段的用户进行的任何 UUID 欺骗,但除非内容极其有价值,否则恕我直言,这通常是得不偿失的。

\n