不确定这是否是一个好的解决方案,但它是上述解决方案的扩展。执行 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;
}
}
}