iOS 应用内购买无后端

Posted

技术标签:

【中文标题】iOS 应用内购买无后端【英文标题】:iOS In-App Purchase No Back-end 【发布时间】:2013-03-15 16:25:40 【问题描述】:

我正在调查应用内购买的使用情况,这基本上是我的应用的“专业”版本。 该应用程序本身是免费的,但一旦进入,用户就可以选择购买专业内容(只有一件事)。 “专业”内容已经在应用程序上,无需下载,只需“解锁”即可。

    Apple 指南是否允许这样做? 由于只购买 1 个非消耗品,我认为不需要使用后端服务器。 指南是否允许这样做? 将结果存储在 NSUserDefaults 中是否安全且简单,如果安装在另一台设备上,则从购买的 SKPayment 恢复等中提取结果?

我查看了其他几个问题。

In-App Purchasing? Retrieve purchased information in In-App purchase How do I add consumable In App Purchases using NSUserDefaults and not my own server?

这些似乎表明我的方法是有效的,但据我所知,这些事情最近发生了变化,我想确保我采取了正确的方法。

谢谢!

【问题讨论】:

【参考方案1】:

    内置内容没问题。

    最佳实践是在服务器上使用应用程序和服务器之间的身份验证协议执行收据验证(这也适用于其他几个移动应用商店)。如果您在设备上执行验证,人们可以使用现有工具绕过您的 IAP 检查并窃取内容。查看https://developer.apple.com/library/ios/#releasenotes/StoreKit/IAP_ReceiptValidation/ 了解一些信息。

因此,虽然不需要服务器,但建议使用。只有您可以说保护您的内容是否值得维护服务器的麻烦。

我同意 J. Freeman 的观点,即 NSUserDefaults 中的直接存储似乎很弱。我将内容存储在本地文件中,但格式与设备相关,并且需要服务器计算的密钥来创建它。最后,是的,您应该使用 SKPaymentQueue restoreCompletedTransactions 在另一台设备上购买商品。意识到恢复的交易也应该在您的服务器上验证其收据。

【讨论】:

链接不起作用(与 Apple 文档一样)。是这个吗? developer.apple.com/library/ios/releasenotes/General/… 从那里链接的用于在服务器上验证的文档。【参考方案2】:

是的,这很好。您不需要后端即可进行应用内购买,并且可以内置您的内容。

我会说要小心的一件事是将解锁信息存储在 NSUserDefaults 中,因为有人很容易通过这种方式伪造购买。您应该将解锁信息存储在钥匙串中。

【讨论】:

以上是关于iOS 应用内购买无后端的主要内容,如果未能解决你的问题,请参考以下文章

iOS中应用内购买的服务器端验证最佳实践

iOS的内购-应用内购买-关东升-专题视频课程

在服务器端验证 Mac OS X 的耗材应用内购买

Firebase iOS SDK 如何执行其应用内购买验证?

IAP(应用内购买)入门价格我如何管理它 iOS?

iOS 应用内购买:Apple 评论者会测试实时环境还是沙盒环境?