【问题标题】:iOS in-app purchases verify receipts for consumablesiOS 应用内购买验证消耗品收据
【发布时间】:2017-08-22 21:30:32
【问题描述】:

在带有应用内购买的 iOS 中,有必要通过订阅验证收据。是否也需要验证消耗品的收据?

【问题讨论】:

    标签: ios in-app-purchase receipt-validation in-app-subscription


    【解决方案1】:

    不,您不需要验证消耗品的收据。

    您也不需要验证订阅收据。这里重要的是您可以恢复正在运行的订阅;但为此您可以使用购买 ID。

    一如既往地确保 100% 确保您在告诉 iOS 购买成功之前已向用户提供了所支付的费用!

    (您想在服务器上保留与购买相关的信息还有很多其他考虑因素,但这不是您要问的。)

    【讨论】:

      【解决方案2】:

      需要,不。推荐,是的。

      所有购买;消耗品、非消耗品和订阅容易受到欺诈性攻击。通常通过 iap 破解程序或网络欺骗。验证收据可以缓解这个问题。

      您可以在应用程序中本地验证收据(请参阅Validating Receipts Locally),但它仍然容易被破解。

      防止欺诈的最安全方法是执行服务器端验证,将收据发送到您的服务器,然后将其发送给 Apple(请参阅Validating Receipts With the App Store)。

      但是,不要在应用程序本身中通过应用商店验证收据。欺骗网络请求并返回肯定(有效)结果真的很容易。

      如果您发现 Apple 报告中的实际购买与应用内购买分析之间存在很大差异(假设您有这种差异),您可能需要投资于服务器端验证,否则,如果这不是问题,别担心。

      【讨论】:

      • 在服务器端验证消耗品的情况下,如果在验证收据时网络操作失败会怎样?例如,假设购买了产品并将收据发送到 iPhone。然后,收据又从 iPhone 发送到受信任的服务器。如果后一个网络操作失败,是否应该保存收据以便在第二次重试验证? (消耗品的收据仅在购买时比较)。我认为这种方式是不正确的,因为在这种情况下,用户为无法立即使用的产品付费。
      • @AndreaGorrieri 处理网络中断等上游故障取决于您希望如何处理欺诈。您可以在证明有效之前将购买视为欺诈,也可以在证明欺诈之前将其视为有效。在前一种情况下,将收据发送到您的服务器,如果失败(例如,没有网络、500 等),请继续以指数方式重试。在后者中,发送收据,如果失败则解锁内容并继续重试。如果收据是欺诈性的,则撤销访问权限。
      • 谢谢@Mark,我关心的是:由于消耗品的收据仅在购买时比较,应如何管理验证重试?我应该在本地保存收据以便将来重新发送吗?我可以简单地不将交易标记为“已完成”吗?根据我在文档中的理解,在后一种情况下,StoreKit 应该再次调用事务队列观察者(传递收据),直到事务被标记为“完成”,是否正确?
      • @AndreaGorrieri 完成消耗品购买交易后,该交易将从收据中删除。 IE。如果您要在验证之前完成购买队列,则不会有需要验证的交易。但是,如果您在完成之前进行验证并且在您的服务器上遇到错误,您将需要决定要做什么。您可以在本地保存收据(在完成之前),调用完成,然后以指数方式重新尝试验证。如果收据是欺诈性的,您可以以某种方式惩罚用户,例如如果您出售游戏内货币,请拿走一些。
      • 感谢@Mark 的帮助,假设我仅在收据验证后完成交易,以便在收据验证错误(网络中断)的情况下交易未完成。在这种情况下是否会再次调用 paymentQueue(_:updatedTransactions:) 方法?我可以在那个时候取回消耗品的收据并重试验证程序吗?如果交易未完成,是否会从用户的信用卡中扣款?
      猜你喜欢
      • 2018-11-30
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多