2013-05-02 4 views
14

Ho impostato Android nella fatturazione delle app v3, utilizzando la classe IABHelper e seguendo lo standard example code fornito da Google. Lo faccio per lo più durante l'acquisto (con l'apk firmato e l'addebito sulla carta di credito reale).Android IAB: "Errore durante l'aggiornamento dell'inventario (interrogazione dei prezzi degli articoli)" Errore sviluppatore

Tuttavia, nel corso dei test di oggi ho iniziato a ottenere un nuovo errore nel mio QueryInventoryFinishedListener dal metodo queryInventoryAsync():

IABResult message: "Error refreshing inventory (querying prices of items)" 
IABResult response: 5:Developer Error 

Strano cosa # 1 è che questo si verifica dopo i onIabSetupFinished() rendimenti di callback (con la consueto messaggio "Evviva"). La cosa strana # 2 è che posso successivamente effettuare un processo di acquisto in app (usando il metodo launchPurchaseFlow()).

Ho trovato una patch here che risolve gli stessi sintomi che sto riscontrando, ma non ha funzionato per me.

Ho provato a utilizzare dispositivi diversi, utilizzare diversi account Gmail e creare un nuovo prodotto da zero. Ho persino ricevuto l'errore sulle versioni precedenti della mia app che funzionavano correttamente (cosa ?!).

La mia domanda è: Perché non posso richiedere l'inventario del prodotto, anche dopo che IABHelper ha confermato che l'installazione è stata eseguita correttamente? Cosa potrebbe causare questo errore e come posso risolverlo?

Grazie per qualsiasi intuizione.

UPDATE

sono stato in grado di ottenere le transazioni di query di inventario di lavorare ancora una volta con l'ammaraggio, l'account stavo testando con, e il passaggio a un nuovo account. Nessun cambio di codice.

La mia conclusione provvisoria è che qualcosa è stato danneggiato nell'account utente che stavo usando (?). Durante i test, l'ho raggiunto con un sacco di acquisti di diversi prodotti in-app, ma devo ancora scoprire cosa è successo e assicurarmi che ciò non accada a nessuno dei miei utenti.

Per favore fatemi sapere se avete qualche esperienza con questo. Grazie!

+0

sto vivendo lo stesso problema con un app che ha 25 in-app. Non ho ancora provato a passare a un altro account utente, ma ancora non lo farebbe per una soluzione in quanto potrebbe accadere anche ad altri utenti. Hai qualche aggiornamento su questo? –

+0

@ gcl1 Ho lo stesso problema. Il tuo problema è risolto. – glo

risposta

13

Ho trovato per tentativi ed errori che se si interrogano più di 20 elementi contemporaneamente, fallirà con questo errore.

Ho inviato una patch per IabHelper.java che divide l'elenco di SKU in pacchetti di 20 elementi ciascuno e fa la query.

È possibile prendere lì: https://code.google.com/p/marketbilling/issues/detail?id=123

+0

La divisione ha risolto il mio problema di interrogare l'elenco di prodotti di grandi dimensioni. Nel mio caso la limitazione era di 22 articoli. L'errore è stato restituito dal servizio di riproduzione. Quindi da dove viene questa limitazione? Perché solo 20 o 22 articoli? Grazie. – RusArtM

+0

@RusanovskiyArtem Non ho idea di dove provenga la limitazione, ma ho restituito la patch a Google, quindi dovrebbe far parte degli esempi in una delle prossime versioni. –

+0

@ValerioSantinelli Ho lo stesso problema e ho provato la tua patch ma non funziona per me. Qualche idea sul perché. Sto ancora ricevendo 'IabResult: Errore durante l'aggiornamento dell'inventario (interrogando i prezzi degli articoli). (risposta: 5: Errore sviluppatore) ' – glo

19

abbiamo avuto lo stesso problema in una delle nostre applicazioni sotto modalità di test. In seguito, abbiamo capito che dovevamo cancellare la cache dell'app Google Play Store.

Così si può provare questo -

  1. Vai menu Impostazioni del dispositivo.
  2. Passare ad Applicazioni (può anche essere etichettato Application Manager).
  3. Passa a Tutte le applicazioni.
  4. Cerca e apri l'app Google Play Store.Toccalo, le impostazioni dell'applicazione mostreranno
  5. Toccare Cancella dati e Cancella cache.

Ora torna alla tua app e prova a caricare l'inventario. Ha risolto il nostro problema.

+0

Questo ha funzionato per me. Non tutte le volte che viene chiamato 'queryInventoryAsync()' le informazioni vengono recuperate dai server di Google. Lo fa anche dalla cache per scuotere la velocità. – AxeEffect

+7

Ma non possiamo chiedere agli utenti di farlo se questa app è stata rilasciata nel Play Store. –

0

Ho lo stesso problema con questo registro:

"InAppBillingManager.getSkuDetails: Input Error: skusBundle array associated with key ITEM_ID_LIST cannot contain more than 20 items." 

questa nota aveva menzionato nel file di IInAppBillingService.aidl, consultare la documentazione del metodo getSkuDetails(..).

Così si dovrebbe fare lo stesso processo per ogni 20 articoli ogni volta