9

Sto implementando uno scenario di abbonamento auto-rinnovabile, in cui la convalida della ricevuta verrà gestita dal mio codice lato server. Seguendo Apple documentation, otterrò i dati di ricevuta da NSBundle e passerò quei dati al mio server, che contatterà Apple per convalidare la ricevuta e informare l'app sul risultato.Sottoscrizioni auto-rinnovabili iOS: flussi di convalida scontrino

Ora le mie domande sono legati ai flussi necessari relativi alla convalida ricezione:

  1. Se l'utente acquista un abbonamento, la mia ricevuta sarà aggiornato automaticamente con le informazioni da questo acquisto? In tal caso, è necessario convalidare tale ricevuta subito dopo un acquisto o devo "sbloccare" immediatamente l'app?

  2. In quali situazioni manca la ricevuta da NSBundle? Se ciò accade, suppongo che dovrei usare SKReceiptRefreshRequest per aggiornare la ricevuta e inviarla al server per la convalida.

  3. Se l'utente installa l'app su un altro dispositivo e ripristina i suoi acquisti restoreCompletedTransactions, ottengo automaticamente la ricevuta nello stesso momento? Suppongo di dover convalidare la ricevuta dopo un ripristino per assicurarmi che ci sia un abbonamento attivo, corretto?

  4. Quando il mio server tenta di convalidare una ricevuta e tale ricevuta non è valida, cosa dovrebbe accadere sul lato dell'app? Aggiorna la ricevuta (che chiederà all'utente le credenziali) e passala nuovamente al server per una nuova ri-validazione?

+0

Rui, hai già capito i dettagli di questo? Sarebbe bello se tu (o qualcun altro) potessi fornire una risposta a questa domanda. –

risposta

7

Se l'utente acquista un abbonamento, la mia ricevuta sarà aggiornato automaticamente con le informazioni da questo acquisto?

Sì, la ricevuta è essenzialmente un file memorizzato sul dispositivo, dopo un acquisto il file di ricevuta viene aggiornato e aggiunto all'ultima transazione.

In tal caso, è necessario convalidare tale ricevuta subito dopo un acquisto o devo "sbloccare" immediatamente l'app?

Questo dipende da quanto sei preoccupato per le frodi. Ci sono molti strumenti disponibili per rompere gli acquisti in-app sui dispositivi jail broken, e la non validazione può consentire agli utenti di accedere ai tuoi contenuti gratuitamente. Se questo è un problema, convalidare le ricevute prima di sbloccare il contenuto.

In quali situazioni manca la ricevuta da NSBundle?

Se nel mezzo di un acquisto l'utente perde la connettività, i dati di ricevuta potrebbero non essere completamente scaricati, lasciando una ricevuta incompleta. Sospetto che ci siano altri scenari, ma non ne ho mai visto nessuno.

Se ciò accade, suppongo che dovrei usare SKReceiptRefreshRequest per aggiornare lo scontrino e inviarlo al server per la convalida.

Sì, anche se tenere a mente questo sarà solo aggiornare il file ricezione, sarà quindi necessario chiamare appStoreReceiptURL di nuovo per recuperare la ricevuta dal file.

Se l'utente installa l'app su un altro dispositivo e ripristina i suoi acquisti restoreCompletedTransactions, ricevo automaticamente la ricevuta nello stesso momento?

Il file di ricevuta verrà aggiornato ma sarà necessario chiamare appStoreReceiptURL per ottenere la ricevuta.

Suppongo di dover convalidare la ricevuta dopo un ripristino per verificare che sia presente un abbonamento attivo, corretto?

Sì, buona idea.

Quando il mio server tenta di convalidare una ricevuta e tale ricevuta non è valida, cosa dovrebbe accadere sul lato dell'app? Aggiorna la ricevuta (che chiederà all'utente le credenziali) e passala nuovamente al server per una nuova ri-validazione?

Vorrei dire all'utente che non si ritiene che la ricevuta sia valida e fornire un'opzione per riprovare. Chiama SKReceiptRefreshRequest, invia di nuovo la ricevuta al tuo server. Mostra di nuovo l'opzione se successivamente fallisce.

Se l'utente ha effettuato un acquisto fraudolento dubito che si lamenteranno con te o Apple.