2011-12-14 11 views
10

Ho un'app con abbonamenti auto rinnovabili, l'acquisto di questi va bene, tuttavia se un utente elimina l'app e tenta di ripristinare gli abbonamenti in un secondo momento non ritorno i dati che ci si aspetterebbero.iOS: SKPaymentTransactionStateRestored originalTransaction == nil

In base a apple docs, dovrei ricevere un originale Transit con i dettagli della transazione iniziale, nella maggior parte dei casi e sulla sandbox questo è esattamente ciò che sta accadendo tuttavia su alcune delle nostre app live dei clienti stiamo ricevendo un valore nullo per il originalTransaction.

Qualcuno può pensare perché non riceverei il ritorno originale? La data restituita in [transaction transactionDate] è la stessa che mi aspetto da [[transactionTransaction transazione] dataDate] tuttavia non so se è lecito ritenere che se la transazione originale è nulla, il [transaction transactionDate] sarà sempre essere la data dell'originale Transazione.

+0

basta andare attraverso questo .. http://stackoverflow.com/questions/9537663/ios-how-to-get-a-list- di prodotti già acquistati –

risposta

1

Stavo avendo lo stesso problema. Ho risolto il problema controllando se la transazione originale è nulla e restituisce la transazione corrente.

Ecco il codice ho sostituito in - (void)restoreTransaction:(SKPaymentTransaction *)transaction

if (transaction.originalTransaction.payment.productIdentifier) { 
    [self provideContentForProductIdentifier:transaction.originalTransaction.payment.productIdentifier]; 
} else { 
    [self provideContentForProductIdentifier:transaction.payment.productIdentifier]; 
} 
+0

Puoi spiegarlo in dettaglio? – Gaurav

+0

@Gauravakasparsh durante il test ho trovato che il server restituiva nill per alcune delle transazioni originali, per questo ho inserito una condizione if e l'ho sostituita con la transazione corrente se ne ha la nill. – Sam

+0

Grazie per aver confermato, lo stesso stava accadendo con me e ho risolto anche gestendo nil. – Gaurav