iOS应用内购买无后端

6
我正在研究使用应用内购买来实现我的应用的“专业版”。应用本身是免费的,但用户可以选择购买专业内容(只有一个)。专业内容已经在应用中,无需下载,只需“解锁”即可。
以下是我的问题:
  1. 苹果指南允许这样做吗?
  2. 由于只有一个非消耗品需要购买,我认为不需要使用后端服务器。
    • 同样,这是否符合指南规定?
    • 如果将结果存储在NSUserDefaults中,并在另一个设备上安装时从SKPayment恢复购买等方式获取结果,这种方法是否安全简便?
我查看了几个其他问题: 这些似乎表明我的方法是有效的,但由于我知道这些事情最近发生了变化,我想确保我采取了正确的方法。
谢谢!
2个回答

3
  1. 可以在内容中构建没有问题。

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

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

我同意J. Freeman的看法,直接存储在NSUserDefaults中似乎很薄弱。我将东西存储在本地文件中,但格式与设备相关,并需要服务器计算密钥才能创建它。最后,是的,您应该使用SKPaymentQueue restoreCompletedTransactions来获取在另一个设备上购买的商品。请注意,恢复的交易也应在您的服务器上验证其收据。


链接无效(像苹果文档一样总是这样)。就是这个吗?https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Introduction.html - Dalibor Filus
从那里链接的文档用于在服务器上进行验证。 - DrC

2

没问题。你不需要后端就能完成应用内购买,内置内容也可以。但是需要注意的是,不要把解锁信息存储在NSUserDefaults里面,因为这样会让别人很容易伪造购买。你应该把解锁信息存储在Keychain中。


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