2012-03-29 7 views
0

Ich arbeite an einer Anwendung, die auch ein paar Funktionen unterstützt, die über In-App erworben werden können. Ich habe zwei Knöpfe zur Verfügung gestellt, Kaufen und Wiederherstellen, wörtlich gemeint.In der App wiederherstellen, ohne zu kaufen

Ich habe eine sehr grundlegende Sorge, was passiert, wenn der Benutzer die Wiederherstellen-Taste drückt und nach Anmeldeinformationen Typen in den Anmeldeinformationen gefragt, die nie die In-App käuflichen Produkte gekauft. Wie soll ich mit dieser Bedingung umgehen? Mein Verständnis sagt mir, dass, wenn der Benutzer die Wiederherstellen-Taste drückt, wir restoreCompletedTransactions anrufen, die versuchen wird, die gekauften Produkte wiederherzustellen, und da in dem Fall ich verweise Benutzer hat kein Produkt gekauft, gibt es nichts zu entsperren. Ich denke, das Store-Kit wird es automatisch handhaben und mit einer Kaufoption präsentieren.

Dies funktioniert nicht für mich. Wenn ich ein Konto verwende, das das In-App-Produkt nie gekauft hat und versuche, es wiederherzustellen, wird keine der Delegierten aufgerufen. Und andererseits, wenn ich das Konto verwende, das gekauft habe, um wieder herzustellen, funktioniert alles gut.

Jede Hilfe wird sehr geschätzt.

Danke.

P.S. Ich verwende Testbenutzer und Sandbox env.

+0

Bist Du sicher, dass Sie implementieren - (void) paymentQueue: (SKPaymentQueue *) Warteschlange restoreCompletedTransactionsFailedWithError: (NSError *) Fehler? –

Antwort

0

Siehe Antwort hier: iOS in-app-purchase restore returns many transactions

Sie werden es Beobachter in der Transaktion zu behandeln haben.

Kurz gesagt, starten Sie Wiederherstellungsprozess mit:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 

Dann folgende Transaktion Beobachter genannt wird:

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 
{ 
    int thisIsTheTotalNumberOfPurchaseToBeRestored = queue.transactions.count; 

    for (SKPaymentTransaction *transaction in queue.transactions) 
    { 
     NSString *thisIsProductIDThatHasAlreadyBeenPurchased = transaction.payment.productIdentifier; 

     if([thisIsProductIDThatHasAlreadyBeenPurchased isEqualToString:product1ID]) 
     { 
      //Enable product1 here 
     } 
    } 
} 
Verwandte Themen