Ios 如何确定IAP是否导致恢复(非恢复流)

Ios 如何确定IAP是否导致恢复(非恢复流),ios,in-app-purchase,Ios,In App Purchase,想象一下,一个应用程序带有非消费IAP。通常,用户会购买该产品,如果他们卸载并重新安装或决定在第二台设备上玩,他们会恢复。这个案子很容易处理 然而,存在另一种情况,其中用户在第二设备上执行非消耗品的正常购买流程。在这种情况下,他们会经历购买的步骤,但不是付钱,而是被告知他们已经购买了物品,并询问他们是否愿意重新下载。请注意,我不是在说可下载的内容,只是普通的非消耗品 问题是,我如何区分这种类型的恢复与新购买的恢复?让我来看看一些显然不太有效的答案: 检测事务状态SKPaymentTransact

想象一下,一个应用程序带有非消费IAP。通常,用户会购买该产品,如果他们卸载并重新安装或决定在第二台设备上玩,他们会恢复。这个案子很容易处理

然而,存在另一种情况,其中用户在第二设备上执行非消耗品的正常购买流程。在这种情况下,他们会经历购买的步骤,但不是付钱,而是被告知他们已经购买了物品,并询问他们是否愿意重新下载。请注意,我不是在说可下载的内容,只是普通的非消耗品

问题是,我如何区分这种类型的恢复与新购买的恢复?让我来看看一些显然不太有效的答案:

  • 检测事务状态
    SKPaymentTransactionStateRestored
    --此类型的还原未标记此状态,而是标记为
    SKPaymentTransactionStatePurchased

  • 比较
    原始事务ID
    事务ID
    ——在这种类型的恢复中,这两个值相等

  • 原始采购日期
    采购日期
    进行比较——这是最接近实际情况的。令人惊讶的是,对于真正的新购买,这些日期并不一定完全相同。它们之间的距离通常在几秒钟之内

  • 尽管这不是一个常见的流程,但大多数恢复在发生时应该也将通过正常的恢复流程进行。尽管如此,我看不到任何明确的解决方案来确定我们是否有重新购买


    是相关的,供参考。

    正如您所指出的,通常情况下,您不在乎-差异不相关。您关心您的情况中的区别的用例是什么?也许这将有助于识别带外指示器。。。或者,当您在应用程序启动时解析收据数据时,构建一个项目列表,以便在交易完成时进行比较?该用例用于国内收入跟踪,因为重新下载不是一个创收事件。可以使用一些DB魔术在后端对其进行分类,但最好提前知道。启动后查看收据是一个有趣的想法。实际测试有点棘手,因为dev安装版本不是以收据开始的,但我们可以在启动时调用refresh。大多数收据验证方法不都假设你正在刷新,但它根本不存在(即使在dev中,只要你与测试用户一起登录,你就可以得到有效的收据)?是的,它确实引入了一些障碍,但将“正在重新处理?”测试修改为(validReceipt&&skuAlreadyExists)似乎很容易。内部收入跟踪是否必须在后端进行?在后端检查已知事务ID是否需要花费更多的精力?@ChrisPrince我相信这些恢复将有新的事务ID。至少它们的原始事务ID和事务ID是相同的。你必须确保你有同一个用户,然后uniq根据产品ID购买非消耗品。这是一个很好的利润案例-如果可以轻松完成,可能只值得计算一下。