0

我正在尝试在我的应用程序中实现自动更新订阅,但遇到了一个问题:看起来restoreCompletedTransactions 只能从上次调用restoreCompletedTransactions到现在恢复事务。

例如,如果订阅从 6 月 1 日开始,我restoreCompletedTransactions在 6 月 15 日调用,它会返回 6 月 1 日到 15 年 6 月的所有交易。下次我restoreCompletedTransactions在 6 月 16 日调用,它会返回 6 月 15 日到 6 月 16 日的交易。如果有自上次调用以来没有自动更新事务restoreCompletedTransactions返回任何内容。

这个对吗?如何检索有关以前交易的信息?

4

2 回答 2

0

这与我所经历的背道而驰。根据我的经验,当您打电话时,restoreCompletedTransactions它会向您发送一大堆收据,每次您拨打电话时,收据似乎都会增加。

但要回答您的问题,Apple 建议您存储并验证来自您自己的服务器的所有收据。因此,每当应用程序收到收据时,您都应该将其发送到您的服务器进行验证和可能的存储。这样,如果restoreCompletedTransactions真的只给你新的交易就没有关系了。

此外,当您向 Apple 验证自动更新收据时,他们会向您发送与该订阅相关的最新收据。

于 2012-03-07T08:38:26.347 回答
0

不确定这是否是一个好的解决方案,但它是上述解决方案的扩展。执行 restoreCompletedTransactions,并检查购买交易的日期。也许在恢复的交易中(也许有人可以让我们知道>

// 在你的主代码中某处

#import <StoreKit/StoreKit.h>
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

// 然后,更新 StoreKit 回调函数。kProductId 是应用商店中订阅的productId

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchasing:
                NSLog(@"Purchasing");
                break;

            case SKPaymentTransactionStatePurchased:
                if ([transaction.payment.productIdentifier
                     isEqualToString:kProductID]) {
                    NSLog(@"Purchased ");
                    // update based on transaction.transactionDate
                }
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;

            case SKPaymentTransactionStateRestored:
                NSLog(@"Restored ");
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                if ([transaction.payment.productIdentifier
                     isEqualToString:kProductID]) {
                    // update based on transaction.transactionDate
                }
                break;

            case SKPaymentTransactionStateFailed:
//                NSLog(@"Purchase failed ");
            default:
                break;
        }
    }
}
于 2019-09-11T22:54:28.710 回答