2012-12-18 24 views
6

L'idea è se pioggia o sole, bagnato o fine, l'utente deve ottenere che ha pagato per tutto.Ripristino transazioni di acquisto in-app

da Apple:

 
Store Kit provides built-in functionality to restore transactions for non-consumable products, auto-renewable subscriptions and free subscriptions 

Per tali operazioni Kit di Apple Store ha buoni strumenti build-in. Voglio concentrarmi su altri tipi (consumabili in particolare). Una sola e unica informazione di transazione è un identificativo e un dato di ricevuta che riceviamo da Store Kit dopo l'acquisto con successo. La nostra applicazione utilizza un modello lato server per fornire prodotti. Tuttavia, vi sono ancora molti casi di perdita dei dati di acquisto, ad esempio se il server si blocca mentre l'utente effettua l'acquisto tramite App Store, quindi non è possibile inviare la ricevuta al server per completare il processo di verifica.

soluzione attuale è:

  1. Server restituisce un elenco di identificatori di prodotto
  2. utente seleziona uno; app salva il suo identificativo sul dispositivo (tramite SQLite o Core Data). Il processo di transazione Apple Store standart subito dopo.
  3. In caso di successo, l'applicazione salva i dati di ricevimento unitamente all'identificatore sul dispositivo e li invia al server. Se ci sono stati errori o cancellazioni, l'identificatore viene rimosso immediatamente dal dispositivo.
  4. Se la risposta del server è OK, l'app rimuove l'identificatore con i dati di ricevuta dal dispositivo. Altrimenti invierà periodicamente richieste al server fino a quando si verifica una risposta positiva.

Ma questo approccio ha ancora delle perdite. Ad esempio, l'utente può rimuovere l'applicazione dal dispositivo in attesa della consegna della transazione al server, quindi non ci sarà alcuna prova del suo acquisto.

I vostri suggerimenti?

risposta

3

La regola fondamentale è che non si chiama finishTransaction: sulla coda di pagamento finché non si è consegnato correttamente il contenuto. Ciò significa che tu fai la richiesta ai tuoi server di verifica e di contenuto e tornano con risposte valide. Solo dopo quelle risposte appropriate chiami finishTransaction :. Si noti che la ricevuta di acquisto errata è valida, ma non va bene. Otterrai persone che cercano di contraffare le merci - non perdere il sonno su di esso, ma inserisci il controllo della ricevuta corretta.

Come ho capito (dai miei articoli non di consumo), finché non si chiama finishTransaction, il negozio continuerà a riprovare sull'installazione della propria app. Per questo motivo, non penso che tu abbia bisogno della tua applicazione per salvare la ricevuta sul dispositivo. Tuttavia, per i materiali di consumo, il server deve memorizzare i dati se si desidera poterli ripristinare in seguito. Un problema non banale è la chiave per memorizzarlo.

BTW, la prima riga è assolutamente corretta e vale la pena perdere il sonno.

+0

Che cosa significa "Si noti che la ricevuta di acquisto errata è valida solo non buona"? – Danik

+0

Volevo solo dire che finisci Transazione: quando la ricevuta è cattiva ma non consegni il prodotto. È inoltre necessario registrare qualcosa sul server e avvisare l'utente. In realtà ho impostato le mie cose per consegnare il prodotto, laddove possibile, finché non sono stato sicuro di aver riscontrato eventuali errori nella verifica della ricevuta. Penso che abbia funzionato su Amazon ma non su Apple o Google. Almeno su Amazon, mi ha salvato dal mio stesso bug. – DrC

+0

In ogni caso, è necessario salvare nell'elenco la chiave che hai menzionato sopra per evitare che il contenuto si esaurisca. Ad esempio, l'app non ha ricevuto la risposta e l'utente spegne il dispositivo.All'avvio dell'app, Store Kit invia nuovamente la richiesta, ma l'app non ha informazioni sulla transazione per quel momento. Possiamo identificare la transazione con la chiave e il suo identificatore e inviarla al server. Al termine della verifica, il server termina le chiamate all'appTransaction :. Se viene rilevata una falsificazione, il server può informare l'app di interrompere le richieste per questa transazione. Inoltre, è utile limitare le richieste per evitare l'onere del server dovuto alle transazioni sospese. – Lion

Problemi correlati