想象一下具有非耗材IAP的应用程序。通常,用户会购买该产品,如果他们卸载并重新安装或决定在第二台设备上玩,他们就会恢复。这种情况很容易处理。
然而,存在另一种情况,其中用户在第二设备上执行非消耗品的正常购买流程。在这种情况下,他们会完成购买的步骤,但不会付钱,而是告诉他们已经购买了商品,并询问他们是否愿意重新下载。请注意,我并不是在谈论可下载的内容,只是常规的非消耗品。
问题是我如何区分这种类型的恢复与新购买?让我来看看一些不太有用的明显答案:
检测交易状态SKPaymentTransactionStateRestored
- 此类型的恢复未标记此状态,标记为SKPaymentTransactionStatePurchased
将originalTransactionId
与transactionId
进行比较 - 在此类恢复中,这两个值相等。
将originalPurchaseDate
与purchaseDate
进行比较 - 这是最接近工作的东西。令人惊讶的是,对于真正的新购买,这些日期并不一定相同。它们通常在几秒钟之内。
当然,这不是一个常见的流程,大多数恢复,当它们发生时,应该并且将通过正常的恢复流程发生。尽管如此,我还没有看到任何明确的解决方案来确定我们是否有重新购买。
This page from the Apple docs是相关的,仅供参考。