2013-02-05 12 views
5

Quale codice di stato della risposta verrà restituito al servizio di fatturazione in-app di Google Play {ice, er} V3 in seguito a una condizione di timeout della rete? Questa uniforme è tra tutte le sue funzioni?Android: quale codice di risposta viene restituito dalla fatturazione V3 in-app dopo il timeout?

+0

Ho anche affrontato un problema simile. Si prega di controllare il mio problema. http://stackoverflow.com/questions/16495510/iab-error-you-already-owned-this-item –

+0

@YanLinAung Credo che se uno vede il problema come un "problema analogo" dipende dalla prospettiva. ;) –

risposta

7

Descriverò i miei risultati qui. Ho provato questo su un AVD con un GP dotato di tutte le funzionalità (GP Store V3.10.10, GP Services 2.0.12, G Services Framework 4.1.2), estraendo la presa dell'host.

  • Il metodo getPurchases() restituisce un risultato in cache, se possibile (si ricorda che siamo non parlando di una cache al di fuori del Servizio qui, ma un diretta chiamata del getPurchases). Ovviamente, questo significa che quasi sempre si ottiene un risultato memorizzato nella cache tranne quando il servizio viene reinizializzato a causa della perdita di dati locali, un caso che non è molto probabile e spesso non deve essere trattato in modo speciale sul livello di applicazione.
  • Il metodo consumePurchase() restituirà il valore intero 6 (BILLING_RESPONSE_RESULT_ERROR) dopo un presunto timeout di rete interno di 20 secondi (quindi aggiungere un po 'di tempo finché il codice del risultato non viene visualizzato dal chiamante). Avevo il sospetto che nonostante BILLING_RESPONSE_RESULT_ERROR fosse descritto come Fatal error during the API action perché nessun altro codice di errore avrebbe avuto senso qui; sfortunatamente, la parola fatale è ancora piuttosto inappropriata per una condizione temporanea come un timeout.
  • getSkuDetails() sembra comportarsi proprio come consumePurchase(). Aggiornamento: È ora disponibile la prova che getSkuDetails() può accedere alle informazioni memorizzate nella cache anche all'interno del servizio locale.
  • Sembra che getBuyIntent() funzioni correttamente senza connettività se l'elemento è già noto al servizio. Questo spiega perché Hartok vede una schermata di acquisto GP vuota: non è un problema ottenere un obiettivo di acquisto da IAB V3 senza connettività.

Conclusione: il servizio di fatturazione in-app V3 sembra funzionare con una cache interna e un timeout di connessione al server di 20 secondi. Per gli errori di comunicazione del server che la cache locale non è in grado di risolvere, viene utilizzato il codice di risposta 6.

+0

Quindi cosa succede se la mia cache locale e il server non sono sincronizzati? Ad esempio, ottengo costantemente la finestra di dialogo "Hai già questo articolo", anche se getPurchases non restituisce l'elemento che dice di possedere? – VicVu

+0

@Vee Stai parlando di un'app che hai scritto tu, giusto? In tal caso, usi il codice di esempio di Google? (Suggerimento: non è robusto.) Non sono sicuro di dove venga il dialogo "tu già possiedi questo"; se viene visualizzato dalla parte online di Google Play, probabilmente c'è un problema con la cache dei servizi di Google Play sul tuo dispositivo; cancellare i dati locali di quel servizio. Se il dialogo proviene dal codice di esempio di Google Play IAB, allora sarebbe una storia diversa - per quanto ricordo, fa una cache _additional_ basata sui timestamp di validità. Pubblica più dettagli se necessario. –

+0

@Vee One [la scoperta del codice di esempio di Google Play IAB non è robusta] (http://stackoverflow.com/a/14935976/1856738); si riferisce ad un altro aspetto, ma non mi fiderei del codice che non verifica una condizione di errore così importante. –

Problemi correlati