2016-01-05 10 views
5

Stiamo utilizzando la convalida lato server per verificare i nostri acquisti di app in iTunes. Quando una transazione viene inviata a SKPaymentTransactionObserver, prendiamo la ricevuta da appStoreReceiptURL per convalidarla.Come utilizzare una singola appStoreReceiptURL per verificare più transazioni StoreKit?

if let receiptPath = NSBundle.mainBundle().appStoreReceiptURL?.path where 
    NSFileManager.defaultManager().fileExistsAtPath(receiptPath), 
    let receiptData = NSData(contentsOfURL:NSBundle.mainBundle().appStoreReceiptURL!) { 
    return receiptData 
} 

Ma in alcuni casi, come quando stiamo restaurando gli acquisti, ricevere più transazioni al metodo:

public func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) 

Sembra piuttosto strano di utilizzare gli stessi dati di ricevimento per verificare ogni transazione. La ricevuta unica contiene dati su ciascuna transazione?

risposta

9

La ricevuta singola contiene dati su ciascuna transazione?

Sì. La ricevuta accessibile da appStoreReceiptURL è una ricevuta singola per tutte le transazioni permanenti per l'utente e l'app.

Docs on In-app purchase receipt

L'in-app ricevuta d'acquisto per un prodotto di consumo si aggiunge alla ricezione quando l'acquisto è fatto. Viene conservato nella ricevuta finché l'app non completa la transazione. Dopo questo punto, viene rimosso dalla ricevuta al successivo aggiornamento della ricevuta, ad esempio quando l'utente effettua un altro acquisto o se l'app aggiorna esplicitamente la ricevuta.

La ricevuta di acquisto in-app per un prodotto non consumabile, abbonamento auto-rinnovabile, abbonamento non rinnovabile o abbonamento gratuito rimane nella ricevuta a tempo indeterminato.

I.e. tutti gli acquisti in-app compresi i rinnovi dell'abbonamento e gli acquisti ripristinati e gli acquisti consumati esclusi creano una nuova transazione e sono memorizzati nella ricevuta.

Docs on Working with Subscriptions:

Dopo un abbonamento si rinnova con successo, Conservare il kit aggiunge una transazione per il rinnovo alla coda di transazione. La tua app controlla la coda delle transazioni all'avvio e gestisce il rinnovo allo stesso modo di qualsiasi altra transazione.

Docs on Restoring Purchased Products:

Ripristino transazioni completate crea una nuova transazione per ogni transazione completata l'utente ha effettuato.

Si noti che lo original transaction id sarà lo stesso per gli acquisti ripristinati e per i rinnovi degli abbonamenti.

La ricevuta è essenzialmente un file memorizzato sul dispositivo che l'app aggiorna quando viene aggiunta una nuova transazione.

+0

In una nota correlata, come tracciamo un abbonamento auto-rinnovabile su tutti i dispositivi? Cioè se l'utente ha acquistato l'abbonamento su un iPad, otterrà una transazione aggiornata sul proprio iPhone? O dovranno ripristinare l'acquisto? –

+0

Dovrai offrire un'opzione per il ripristino degli acquisti (questo è un requisito di Apple comunque).Una volta ripristinata, l'app sul nuovo dispositivo avrà la ricevuta. –

Problemi correlati