2012-10-29 7 views
5

Ho implementato IAP in cui è disponibile un acquisto una tantum che sblocca alcune funzionalità nell'app. Poiché l'acquisto viene effettuato una sola volta da ciascun utente, posso semplicemente chiedere il servizio IAP di Apple se questo utente ha effettuato l'acquisto. Se è così, sblocca la funzione. In caso contrario, visualizzare il prompt IAP. Probabilmente ho persistito anche il flag "userDidMakePurchase" nelle impostazioni predefinite dell'utente come soluzione imperfetta all'utilizzo dell'app senza una connessione di rete.Mantenimento di record di acquisti in-app per iOS

Ora mi piacerebbe implementare un IAP in cui l'utente può farlo più e più volte. Ogni volta che l'utente riceve dieci token per utilizzare una valuta in-app. Come posso determinare il numero di token che un particolare utente ha quando avviano l'app?

Finora ho considerato la persistenza di un conteggio di token nelle impostazioni predefinite dell'utente. Ciò ha alcuni aspetti negativi importanti come l'eliminazione e la reinstallazione dell'app che cancella il saldo del token dell'utente. Anche i token non verranno trasferiti su altri dispositivi.

Ovviamente potrei mantenere il conteggio dei token sul mio server o utilizzare AWS. Comunque mi piacerebbe evitare questo, se possibile. Ho solo familiarità con le basi IAP, quindi forse Apple tiene traccia di tutti gli acquisti e posso solo capirlo da lì.

+0

"Ovviamente potrei mantenere il conteggio dei token sul mio server o usare AWS, ma vorrei evitare questo, se possibile." Vuoi elaboarte perché vuoi evitare questo? – khunshan

risposta

8

Passare da "Acquista una volta, usa per sempre" a "Acquista molte volte, usa finché dura" rende il tuo acquisto un consumabile nella terminologia Apple. Poiché Apple non memorizza per te lo stato degli acquisti di materiali di consumo, il compito di tenere traccia del consumo della risorsa dipende interamente dalla tua applicazione.

In generale, ci sono quattro posti che si potrebbe potenzialmente utilizzare per memorizzare il numero restante:

------------------------------------------------------------------ 
|  Storage  | Offline? | Reinstall? | Encrypted? | Large? | 
------------------------------------------------------------------ 
| Documents Folder | YES |  NO  |  NO  | YES | 
| iCloud   |  NO |  YES |  NO  | YES | 
| User Defaults | YES |  NO  |  NO  | NO | 
| Keychain   | YES |  YES |  YES | NO | 
------------------------------------------------------------------ 

Dal momento che è necessario memorizzare una piccola quantità di dati, il candidato ideale è Keychain: funziona offline, sopravvive a reinstallazioni e, come bonus aggiuntivo, è anche crittografato.

Anche se non v'è built-in NS wrapper per il portachiavi CF API, Apple ha gentilmente published una bella wrapper per esso (scorrere fino alla parte inferiore della pagina per vedere il codice). Aggiungi il framework di sicurezza alla tua soluzione, copia-incolla il codice del wrapper nel tuo progetto (sono solo due file). Ora puoi usare il portachiavi come se fosse un NSDictionary.

+3

Grazie mille per le informazioni! Il portachiavi sembra promettente in qualche modo. Tuttavia non sono sicuro che risolva il problema di più dispositivi. I dati del portachiavi non sono sincronizzati tra i dispositivi vero? – SundayMonday

+5

@SundayMonday Sfortunatamente, condividere i materiali di consumo tra i dispositivi è un'operazione estremamente complessa, che richiede (tra le altre cose) un supporto per gli aggiornamenti transazionali. Apple riconosce indirettamente l'ingannevolezza di farlo correttamente nelle proprie Linee guida per l'acquisto in-app esentando i materiali di consumo dai requisiti di condivisione: "Gli articoli di consumo sono l'unica eccezione al requisito che i tuoi contenuti siano disponibili su tutti i dispositivi dell'utente. che vengono utilizzati o scompaiono dopo l'uso e non possono mai essere riutilizzati." – dasblinkenlight

+2

@SundayMonday Se è necessario implementare la condivisione, molto probabilmente sarà necessario utilizzare un [modello prodotto server] (http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/APIOverview/ Panoramica delStoreKitAPI.html), che è molto più complesso – dasblinkenlight

1

Sono ragionevolmente sicuro che l'archivio di valori-chiave di iCloud permanga attraverso l'eliminazione/reinstallazione dell'app. Questa potrebbe essere la strada da percorrere.

In caso contrario, è necessario il proprio server per memorizzare il conteggio dei token, insieme ad un modo per autenticare l'utente (l'id del dispositivo non va bene, cosa succederebbe se sostituiscono il dispositivo e ripristinano dal backup?) E tutti i problemi connessi - registrazione, schermate password dimenticate, ecc.

Problemi correlati