iOS 付费应用的应用内购买

iOS in-app purchase for a paid app

我创建了一个付费应用。现在我想让它免费,以便更多用户可以下载该应用程序并在应用程序购买中使用以限制某些功能。但是一些用户已经付费购买了我的应用程序。如何在为新用户实施应用内购买的同时保持对老用户的完整功能访问权限?

这是一个简单的示例,但是如果您在服务器上(而不是在 phone 本身)上使用数据库,您不能为您计划销售的每个功能使用一个布尔值,并为当前在数据库中的所有用户将该布尔值设置为 true。这是假设 true 表示他们已经购买了该功能,而 false 表示他们没有购买。 您可以在发布更新后的应用程序后 运行 此查询一次,然后每个用户都会对您销售的这些功能使用默认值 false。

这种情况没有完美的解决方案。

建议 1:

发布最后一个付费更新。在此更新中,使用钥匙串来存储那些 IAP 标志。然后在免费版本中,检查钥匙串中的这些标志。即使应用程序被删除并稍后使用免费版本重新安装,这也会起作用。但如果设备完全重置,无论是由于某些 iOS 版本更新还是用户的,除非还涉及备份和恢复,否则它将无法工作。

建议 2:

不完全是个建议。但是我在 AppStore 上看到类似的应用程序刚刚推出免费版本。然后应用程序受到那些以前用户的差评!

您可以通过阅读 App Store receipt 来做到这一点。收据包含原始购买的版本号和日期。

有两个主要警告:首先,这仅适用于 iOS 7 及更高版本。其次,Apple 不包含用于解析收据的代码(因此我理解用户不太容易破解)。然而,有一个源库,尽管使用一个通用的源库会不太安全。

如果您连接到服务器以注册用户信息,您始终可以创建一个 API 在应用程序启动时执行以验证用户是否为完全访问用户。

但恐怕你的情况不是上述情况。

在这种情况下,您需要将您的数据(在此上下文中是一些加密密钥)与 iCloud 同步,并且在应用程序启动时您可以验证用户类型。

与钥匙串相比,在 iCloud 中使用数据更安全,因为它涵盖了设备格式场景。但绝对不是万无一失的。

其他解决方案可以使用Apple Purchase Receipt 来验证之前购买的版本。但这仅在 iOS7.

后才受支持

检查一些开源库以了解收据的解析: https://github.com/rmaddy/VerifyStoreReceiptiOS

因此结合多种策略是您问题的唯一答案。