【问题标题】:Consumable in app purchases validation应用购买验证中的消耗品
【发布时间】:2016-05-04 06:21:18
【问题描述】:

我们最近推出了只有消耗品应用内购买的应用。我们注意到很多虚假购买 - 购买带有无效收据和“有效”收据,但来自苹果的验证响应中的“in_app”数组是空数组。我需要知道用户如何形成这样的“有效”收据?是收到应用下载而不是应用内购买还是什么?我现在将以下检查用于验证。从 Apple 的 json 响应中提取“in_app”字段,如果它不为空,则检查 product_id 是否匹配。我需要知道这张支票是否足够,或者他们是一个更好的万无一失的支票。

【问题讨论】:

    标签: ios8 in-app-purchase receipt-validation skproduct


    【解决方案1】:

    所有应用都有收据。那些购买了 IAP 的应用在其收据中有一个 in_app 字段。您的用户正在将虚假呼叫推送到他们的 updatedTransaction 方法中,并且您正在获取他们的收据(没有 IAP,因为他们没有购买)并将其发送到您的服务器。其他用户可能会从某个地方交换一些收据(例如,30 个小偷中的一个进行购买并提取该有效收据并将其发送给他们的 29 个共同小偷)。如果他们将该收据粘贴到他们的设备中,然后推送对 updatedTransactions 的调用,那么您的服务器将获得他们现在有效但重复的收据。您的服务器需要检查 *** 收据的日期,并发现它比最近更早,或者甚至比您需要共同发送到服务器的 paymentRequest 更早。 (最好在设备上解码 - 更安全)

    *** 你曾经能够检查 transaction_id 是否有重复的 transaction_id。不幸的是,您不能再这样做了,因为 restoreCompletedTransaction 返回与原始购买相同的 transaction_id。我已经把这件事告诉了苹果,他们不理我。

    【讨论】:

    • 我刚刚意识到,对于消耗品,您可以检查重复的 transaction_id 并拒绝它。
    • 谢谢。我发现“original_transaction_id”是赌注。
    • @PeterB.Kramer 如果大统一收据上有用户完整的购买历史,你怎么知道哪笔交易是与当前购买相关的!?
    • 整个收据有一个 creation_date 字段,而 IAP 特定部分有一个 purchase_date。如果它们相似,那么 IAP 是与刷新收据一起购买的。您的应用有一个名为 updatedTransactions 的方法,它提供一个 transaction.payment.productIdentifier,用于标识刚刚购买或恢复的产品。
    【解决方案2】:

    请参阅此应用内购买常见问题解答My app validates its receipt with the App Store via paymentQueue:updatedTransactions: after a successful purchase. However, the returned receipt contains an empty in_app array rather than the expected products.

    一个空的 in_app 数组表示 App Store 没有记录 用户的任何交易。这可能是应用程序 收据尚未更新。发生这种情况时,您的应用可以 通知用户收据不是当前的并询问 是否刷新。

    有关消耗品的信息会添加到收据中 它们已付款并保留在收据中,直到您完成 交易。完成交易后,此信息为 下次更新收据时删除。从而导致 如果您的应用只销售消耗品,则为空 in_app 数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多