16

Apple 收据验证文档说在启动后立即执行收据验证。这相当于检查由返回的路径中的数据,如果不存在则通过[[NSBundle mainBundle] appStoreRecieptURL]刷新并验证它。SKReceiptRefreshRequest前面链接的文档同时引用了 iOS 和 macOS。

在 iOS 上真的有必要吗?如果是这样,为什么?是为了防止用户在越狱设备上使用我的应用程序,还是没有从应用程序商店购买它(在这种情况下,我可能不在乎我的应用程序是否免费)?或者它对恢复或验证应用内购买等其他操作有影响吗?例如,收据数据是否必须已经存在才能验证应用内购买的交易?

注意:我没有使用应用内订阅。我有应用内购买,但在验证并记录购买服务器端后,我不使用他们的收据。

4

5 回答 5

12

不需要这样做,这只是可选的,可以在 iOS7+ 上完成,如果你有兴趣这样做的话。

简而言之,实施验证纯粹是一项财务决策,即使您验证食谱,也建议不要在失败的情况下禁用内容,因为验证在标准环境中也可能随时失败(例如,在没有连接的情况下),并且这种过度反应可能会破坏您的消费者体验。


总的来说,当您被允许在失败的情况下禁用内容时,无论出于何种原因,在实践中进行验证宁愿在 OSX 上有意义;但是如果你觉得你的消费者比你的收入所暗示的要多,或者被盗内容的数量远远超出了你的利润,那么在 iOS 上也可能值得这样做。


注意:一般而言,您可以在Apple 的文档中阅读有关收据验证的技术细节的更多信息。

于 2016-10-25T08:09:43.760 回答
4

对您的问题的简单回答是否定的,没有必要

这里为你详细解释

  1. 根据此处的 Apple 文档,Apple 提供了两种验证收据的方法,它们仅作为指导,以防止未经授权的应用程序副本运行。有关更多指导,苹果已指出苹果审查指南。
  2. 在此处的审查指南中,Apple 没有提及任何与收据验证相关的强制性内容。

如果收据验证是强制性的,Apple 会提供一个简单的 API 来验证它。

Titbit:在应用商店收据验证方面,您会看到很多拒绝。但所有这些问题都是因为收据验证没有正确完成。

但我个人的建议会与上述答案有所不同。您首先要考虑的是“永远不要低估黑客”。除了应用程序启动之外,多次验证收据。阅读本文了解更多信息。

于 2016-10-24T10:21:20.803 回答
3

您通常只会验证收据以防止未购买您的应用程序的用户或您使用自动续订订阅的用户盗版。

虽然您可以查询 IAP 信息的收据,但实际上更容易(并且应用程序审查要求)在某处提供一个按钮以“恢复以前的购买”并调用

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

这也是一种更好的用户体验,让用户在按下“恢复购买”按钮后可能会被提示输入他们的 Apple ID 和密码,而不是在应用程序启动时无法解释。

于 2016-10-19T12:19:46.237 回答
2

我要给出的理由是:

  1. 如果您从应用程序外部使用订阅组,用户可以更改他们的产品。
  2. 自动续订订阅可以在您的应用之外续订。
  3. 在应用重新启动之前,应用不会接收在应用外部发起的事务。
  4. 用户可以在当前设备上的应用程序之外使用相同的 appleID 在另一台设备上进行购买。

在我们的 appDelegate:application didFinishLaunchingWithOptions 中,我们初始化了一个调用 [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 的类。监控从应用程序内发起的购买。

于 2016-10-18T13:06:55.663 回答
0

这不是必需的,但由于以下原因是有益的:

  1. 您将始终获得确定的购买产品集,而无需用户手动恢复产品。

  2. 您有(有限的)欺诈保护,尤其是当您结合本地和远程验证时。

  3. 使用配方计算自动续订订阅的到期日期要简单得多。

于 2017-08-28T07:43:11.110 回答