SKPaymentTransaction的originalTransaction.transactionReceipt为非消耗品上的恢复

时间:2013-02-12 06:53:15

标签: ios in-app-purchase

在调用restoreCompletedTransactions之后,对于非消耗品,正在返回的SKPaymentTransactions似乎在其originalTransaction.transactionReceipt属性中具有nil。这是文档说我们应该找到原始transactionReceipt:

的地方

https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/MakingaPurchase/MakingaPurchase.html#//apple_ref/doc/uid/TP40008267-CH3-SW2

有没有人真的认为这不是零 - 如果是的话,怎么样?

在返回的SKPaymentTransactions中,看起来实际上正确的transactionReceipt在其transactionReceipt属性中(而不是它们的originalTransaction.transactionReceipt属性)。

2 个答案:

答案 0 :(得分:3)

这也发生在我身上。

这很奇怪,但即使Apple在其文档中指出在transactionReceipt中找到了originalTransaction,我在原始transactionReceipt类中找到了SKPaymentTransaction

所以,在选择要传递的事务之前,我已经设置了一点检查:

SKPaymentTransaction *passedTransaction = nil;
if (transaction.transactionReceipt) {
    passedTransaction = transaction;
} else if (transaction.originalTransaction.transactionReceipt) {
    passedTransaction = transaction.originalTransaction;
}

答案 1 :(得分:2)

我也遇到了同样的问题。在恢复购买时,transactionReceipt上的originalTransaction似乎总是会返回nil。来自transactionReceipt的Apple文档中的讨论:

Discussion
除非transactionState设置为SKPaymentTransactionStateRestored,否则此属性的内容是未定义的。

由于(消耗品项目)的恢复期间transactionState始终设为SKPaymentTransactionStatePurchased,因此originalTransaction.transactionReceipt属性始终为零。