2012-09-21 2 views
1

J'ai un abonnement autorenewable. Lorsque l'application est installée sur un nouvel appareil, Apple renvoie TOUS les reçus d'achat précédents, dans ce cas, puisqu'il s'agit d'un bac à sable, j'obtiens 6 reçus à chaque installation. L'observateur envoie ensuite la file d'attente pour les transactions restoredCompleted. J'ai une méthode pour envoyer la transaction à mon serveur pour la vérification d'Apple, mais elle s'exécute 6 fois à cause des 6 reçus. Je veux vraiment seulement traiter le dernier reçu envoyé.Nombre de reçus multiples pour restoreCompletedTransaction inapp achat

Je suis en train de compter les transactions dans la file d'attente et ne vérifient que la réception lorsque le compteur atteint 1.

Voici ce que j'ai jusqu'à présent:

- (void)paymentQueue: (SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 
if (myQueue == nil) { 
    myQueue = [SKPaymentQueue defaultQueue]; 
} 

NSLog(@"Transactions in Array in My Store %@", [queue transactions]); 
tCount =myQueue.transactions.count; 
NSString *transCount = [NSString stringWithFormat:@"%d",tCount]; 

for (SKPaymentTransaction *transaction in transactions)  

{ switch (transaction.transactionState)  

    { case SKPaymentTransactionStatePurchased: 
      [self completeTransaction: transaction]; 
      break; 

     case SKPaymentTransactionStateFailed: 
      [self failedTransaction: transaction]; 
      break; 

     case SKPaymentTransactionStateRestored:     

      if ([transCount isEqualToString:@"1"]) { 
       [self restoreTransaction: transaction]; 
      } 

      else { 
       tCount--; 

       dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { 
        [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
       }); 
      } 


     default: 
      break; 

      } 
     } 
    return;   
    } 

La restauration de cycles à travers, mais le compte ne décrémente pas. C'est probablement quelque chose de simple et de stupide. Quelqu'un peut-il me montrer comment décrémenter ce compte?

Merci!

+0

Ne devriez-vous pas placer un 'int' avant que' tCount = myQueue.transactions.count; 'déclarer tCount comme un entier? – Andrew

Répondre

2

J'attend jusqu'à ce que restoreCompletedTransactionsFinished avant d'envoyer un reçu à mon serveur pour vérifier avec Apple. Ceci élimine l'envoi de chaque reçu, ce qui après quelques mois pourrait devenir onéreux. Donc, pas besoin de décrémenter à la transaction cout.

Questions connexes