【问题标题】:Is it necessary to validate / refresh an app store receipt on launch in iOS?是否有必要在 iOS 启动时验证/刷新应用商店收据?
【发布时间】:2017-02-14 12:34:19
【问题描述】:

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

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

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

【问题讨论】:

  • 您不需要这样做,这只是可选的,可以在iOS7+上完成;实施验证纯粹是一项财务决策,即使您对其进行验证,也建议您不要在失败的情况下禁用内容,因为验证在标准环境中也可能随时失败(例如,万一没有连接),这可能会破坏您的消费者体验;总的来说,在 OSX 上进行验证更有意义。
  • @holex 你能回答这个问题吗?
  • 没有问题,我只是按照你的要求做了。

标签: ios app-store receipt-validation


【解决方案1】:

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

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


总而言之,当您被允许在失败的情况下禁用内容时,无论出于何种原因,在 OSX 上进行验证更有意义;但是,如果您觉得自己的消费者数量超过了您的收入所暗示的数量,或者被盗内容的数量远远超出了您的利润,那么在 iOS 上也可能值得这样做。


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

【讨论】:

【解决方案2】:

您的问题的简单答案是不,没有必要

这里是详细的解释给你。

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

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

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

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

【讨论】:

  • Apple would have provided a simple API - 不能。可以修补此simple api 的收据验证调用,从而绕过。收据没有万无一失的验证代码,但可以通过混淆逻辑来获得良好的保护,这应该因应用程序而异,并且不公开。因此不能有 Apple API。
【解决方案3】:

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

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

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

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

【讨论】:

    【解决方案4】:

    我要给出的理由是:

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

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

    【讨论】:

    • 这些“原因”似乎证明了为什么应该恢复 iAP,而不是为什么需要实际收据验证
    • “在您的应用程序之外”是什么意思?
    • “在你的应用之外”是指应用不在前台。
    • 怎么会这样? @iCyber​​Paul?
    • 在另一台设备上的 iTunes 中。
    【解决方案5】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 2016-03-08
      相关资源
      最近更新 更多