Ios 如何确定IAP是否导致恢复(非恢复流)
想象一下,一个应用程序带有非消费IAP。通常,用户会购买该产品,如果他们卸载并重新安装或决定在第二台设备上玩,他们会恢复。这个案子很容易处理 然而,存在另一种情况,其中用户在第二设备上执行非消耗品的正常购买流程。在这种情况下,他们会经历购买的步骤,但不是付钱,而是被告知他们已经购买了物品,并询问他们是否愿意重新下载。请注意,我不是在说可下载的内容,只是普通的非消耗品 问题是,我如何区分这种类型的恢复与新购买的恢复?让我来看看一些显然不太有效的答案:Ios 如何确定IAP是否导致恢复(非恢复流),ios,in-app-purchase,Ios,In App Purchase,想象一下,一个应用程序带有非消费IAP。通常,用户会购买该产品,如果他们卸载并重新安装或决定在第二台设备上玩,他们会恢复。这个案子很容易处理 然而,存在另一种情况,其中用户在第二设备上执行非消耗品的正常购买流程。在这种情况下,他们会经历购买的步骤,但不是付钱,而是被告知他们已经购买了物品,并询问他们是否愿意重新下载。请注意,我不是在说可下载的内容,只是普通的非消耗品 问题是,我如何区分这种类型的恢复与新购买的恢复?让我来看看一些显然不太有效的答案: 检测事务状态SKPaymentTransact
SKPaymentTransactionStateRestored
--此类型的还原未标记此状态,而是标记为SKPaymentTransactionStatePurchased
原始事务ID
与事务ID
——在这种类型的恢复中,这两个值相等原始采购日期
与采购日期
进行比较——这是最接近实际情况的。令人惊讶的是,对于真正的新购买,这些日期并不一定完全相同。它们之间的距离通常在几秒钟之内是相关的,供参考。正如您所指出的,通常情况下,您不在乎-差异不相关。您关心您的情况中的区别的用例是什么?也许这将有助于识别带外指示器。。。或者,当您在应用程序启动时解析收据数据时,构建一个项目列表,以便在交易完成时进行比较?该用例用于国内收入跟踪,因为重新下载不是一个创收事件。可以使用一些DB魔术在后端对其进行分类,但最好提前知道。启动后查看收据是一个有趣的想法。实际测试有点棘手,因为dev安装版本不是以收据开始的,但我们可以在启动时调用refresh。大多数收据验证方法不都假设你正在刷新,但它根本不存在(即使在dev中,只要你与测试用户一起登录,你就可以得到有效的收据)?是的,它确实引入了一些障碍,但将“正在重新处理?”测试修改为(validReceipt&&skuAlreadyExists)似乎很容易。内部收入跟踪是否必须在后端进行?在后端检查已知事务ID是否需要花费更多的精力?@ChrisPrince我相信这些恢复将有新的事务ID。至少它们的原始事务ID和事务ID是相同的。你必须确保你有同一个用户,然后uniq根据产品ID购买非消耗品。这是一个很好的利润案例-如果可以轻松完成,可能只值得计算一下。