I have problems with restore in-app subscription. “Some” (not all) users failed to restore the purchase information from App Store.
My implementation is like below (All business logics are eliminated.)
When the application call “paymentQueueRestoreCompletedTransactionsFinished” sometimes _restoreOk seems incorrectly set to false.
I suspect that updatedTransactions is not called or SKPaymentTransactionStateRestored is not returned even though the subscription is enabled at App Store.
Did I miss something?
@implementation AppStore {}
- (id)init
{
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
}
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_3_0)
{
[self paymentQueue:queue updatedTransaction:transactions];
}
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransaction:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions) {
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchasing:
break;
case SKPaymentTransactionStatePurchased:
{
[queue finishTransaction:transaction];
break;
}
case SKPaymentTransactionStateFailed:
[queue finishTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[queue finishTransaction:transaction];
if ([transaction.payment.productIdentifier isEqualToString:PRODUCT_ID_PREMIUM_1MONTH]) {
if (_newestreceipt == nil || [_newestDate compare:transaction.transactionDate] == NSOrderedAscending) {
_restoreOk = true;
}
}
break;
default:
break;
}
}
}
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
if (_restoreOk) {
// …
} else {
// restore failed
// …
}
}This issue started about a week ago. I have never come up against such issues previously.
Thanks in advance.