Compras en la aplicación extremadamente lento

Tengo compras integradas en la aplicación en mi aplicación, son solo compras de un solo disparo que no son consumibles. Funcionan completamente y la implementación incluso está en vivo en la tienda de aplicaciones. Sin embargo, en times aparentemente aleatorios, cuando un usuario intenta comprar la respuesta de Apple es EXTREMADAMENTE LENTO, como en el order de más de 30 segundos por Wi-Fi en una networking de 100Mbps o en LTE / 3G. Parece que no tiene nada que ver con la conectividad, simplemente tarda tanto en llegar la respuesta de Apple.

Aquí está el código básico que crea este post y maneja la respuesta:

// User has decided to buy a sticker pack - (void) promptToBuyPack:(StickerPack *)pack { if([SKPaymentQueue canMakePayments]) { if([products valueForKey:pack.packID]) { SKPayment *payment = [SKPayment paymentWithProduct:[products valueForKey:pack.packID]]; [[SKPaymentQueue defaultQueue] addPayment:payment]; } else { nlog(@"User attempted to buy a pack that iTunes does not recognize"); } } else { UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"Can not make purchases" message:@"Your device does not have purchases enabled. Please enable them in order to proceed" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [a show]; } } - (void) grantProductAccess:(NSString *)productIdentifier { // Store purchase in user defaults nlog(@"Bought product: %@", productIdentifier); [[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithBool:YES] forKey:productIdentifier]; [[NSUserDefaults standardUserDefaults] synchronize]; } - (void) tellUserPurchaseIsComplete { UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"Purchase Complete" message:@"Your pack is now unlocked, Enjoy!" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [a show]; [a release]; } - (void) paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { for(SKPaymentTransaction *transaction in transactions) { BOOL canFinishTransaction = NO; switch (transaction.transactionState) { case SKPaymentTransactionStatePurchased: canFinishTransaction = YES; [self grantProductAccess:transaction.payment.productIdentifier]; [self tellUserPurchaseIsComplete]; if(iPad) [FlurryAPI logEvent:[NSString stringWithFormat:@"Purchased %@ on iPad",transaction.payment.productIdentifier]]; else [FlurryAPI logEvent:[NSString stringWithFormat:@"Purchased %@ on iPod",transaction.payment.productIdentifier]]; break; case SKPaymentTransactionStateFailed: nlog(@"Transactin failed"); canFinishTransaction = YES; break; case SKPaymentTransactionStateRestonetworking: nlog(@"SKPaymentTransactionStateRestonetworking"); canFinishTransaction = YES; [self grantProductAccess:transaction.originalTransaction.payment.productIdentifier]; break; default: nlog(@"SKPaymentTransactionDefault"); break; } // Remove from payment queue if(canFinishTransaction) [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; } }