我正在尝试在我的应用中实现自动续订订阅并遇到问题:看起来restoreCompletedTransactions
仅从最后一次调用restoreCompletedTransactions
到现在恢复交易。
例如,如果订阅于6月1日开始,我在6月15日致电restoreCompletedTransactions
,则会返回6月1日至6月15日的所有交易。下次我在6月16日致电restoreCompletedTransactions
它返回从6月15日到6月16日的交易。如果自上次调用restoreCompletedTransactions
以来没有自动更新事务,则它不返回任何内容。
这是对的吗?如何检索有关以前交易的信息?
答案 0 :(得分:0)
这与我所经历的情况背道而驰。根据我的经验,当你拨打restoreCompletedTransactions
时,它会向你发送一大堆收据,这些收据似乎每次拨打电话时都会增加。
但要回答您的问题,Apple建议您存储并验证来自您自己服务器的所有收据。因此,只要应用收到收据,您就应该将其发送到服务器进行验证和存储。这样,如果restoreCompletedTransactions
真的只给你新的交易,那就无所谓了。
此外,当您通过Apple验证自动续订收据时,他们会向您发送与该订阅相关的最新收据。
答案 1 :(得分: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;
}
}
}