7

Sto riscontrando un problema frustrante con il processo di fatturazione in-app. Ho creato una nuova applicazione nella console di sviluppo, ho aggiunto un prodotto inapp denominato "P1", che è attualmente attivo; Ho caricato la mia app nello store in versione alpha, poi promosso in versione beta, aggiunto un account tester e installato l'apk su un dispositivo (tablet) firmato con l'account tester e un altro con account dev.Fatturazione in-app per Android - queryInventoryAsync restituisce 0 risultato

Ora, mi piacerebbe interrogare il negozio per ottenere informazioni come il prezzo di skus non di proprietà. Ecco il mio codice dal mio attività:

private void istantiate() { 
    List<String> tmp = new List<String>(); 
    tmp.add("P1"); 
    final List<String> skus = tmp; 
    mHelper = new IabHelper(mContext, base64EncodedPublicKey); 
    // enable debug logging (for a production application, you should set this to false). 
    mHelper.enableDebugLogging(true); 
    //create listener 
    bListener = new BillingListener(mHelper, mContext); 

    // Start setup. This is asynchronous and the specified listener will be called once setup completes. 
    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { 
     public void onIabSetupFinished(IabResult result) { 

      if (!result.isSuccess()) { 
       // There was a problem. 
       return; 
      }    
      getInventory(skus); 
     } 
    });   
} 

... 

private void getInventory(List<String> skuList) { 
    // Have we been disposed of in the meantime? If so, quit. 
    if (mHelper == null) return; 

    // IAB is fully set up. Now, let's get an inventory of stuff we own. 
    mHelper.queryInventoryAsync(true, skuList, bListener.mQueryFinishedListener); 
} 

Poi, quando query viene completata, questo pezzo di codice si chiama:

IabHelper.QueryInventoryFinishedListener mQueryFinishedListener = new IabHelper.QueryInventoryFinishedListener() { 
    public void onQueryInventoryFinished(IabResult result, Inventory inventory) { 

     if (result.isFailure()) { 
     // handle error 
     return; 
     } 
     ... 

    } 
}; 

Ma restituito l'inventario è vuoto. Ecco logcat:

 12-13 11:21:36.977: D/IabHelper(6034): Billing service connected. 
    12-13 11:21:36.977: D/IabHelper(6034): Checking for in-app billing 3 support. 
    12-13 11:21:36.987: D/IabHelper(6034): In-app billing version 3 supported for *** 
    12-13 11:21:36.987: D/IabHelper(6034): Subscriptions AVAILABLE. 
    12-13 11:21:36.987: D/IabHelper(6034): Starting async operation: refresh inventory 
    12-13 11:21:36.987: D/IabHelper(6034): Querying owned items, item type: inapp 
    12-13 11:21:36.987: D/IabHelper(6034): Package name: *** 
    12-13 11:21:36.987: D/IabHelper(6034): Calling getPurchases with continuation token: null 
    12-13 11:21:36.997: D/IabHelper(6034): Owned items response: 0 
    12-13 11:21:36.997: D/IabHelper(6034): Continuation token: null 
    12-13 11:21:36.997: D/IabHelper(6034): Querying SKU details. 
    12-13 11:21:37.097: D/IabHelper(6034): Querying owned items, item type: subs 
    12-13 11:21:37.097: D/IabHelper(6034): Package name: *** 
    12-13 11:21:37.097: D/IabHelper(6034): Calling getPurchases with continuation token: null 
    12-13 11:21:37.097: D/IabHelper(6034): Owned items response: 0 
    12-13 11:21:37.097: D/IabHelper(6034): Continuation token: null 
    12-13 11:21:37.097: D/IabHelper(6034): Querying SKU details. 
    12-13 11:21:37.097: D/IabHelper(6034): Ending async operation: refresh inventory 

Si tratta di una settimana da quando il mio prodotto inapp è stato pubblicato, quindi non è una questione di tempo. Ho provato a cancellare i dati dell'app e riavviare il dispositivo.

Modifica: Tutto funziona correttamente con android.test.purchased come test sku.
Edit 2: SKU sono "non gestito"

+0

Sei riuscito a trovare una soluzione? Sto affrontando lo stesso identico problema. –

+0

anche io sto vivendo questo ... qualche risultato? –

+0

Attualmente sto ancora riscontrando il problema –

risposta

0

"Di proprietà elementi di risposta", riferisce il codice di risposta, che in questo caso è BILLING_RESPONSE_RESULT_OK con un valore pari a 0.

Guardando il codice IabHelper.queryPurchases e IabHelper .getSkuDetails, suggerisco che un buon punto di partenza è ottenere i dati con 'inventory.hasDetails ("P1")' o 'inventory.getSkuDetails ("P1")' in onQueryInventoryFinished.

+0

Grazie per la risposta, ma l'inventario è vuoto dopo la prima chiamata. Queste funzioni restituiscono false e null. Ma con android.test.purchased funziona bene:/ –

+0

Non sono sicuro. Forse lo SKU non corrisponde.Assicurarsi che "P1" sia lo sku, non solo il titolo (mostrato nella console dopo il nome - inserito come ID prodotto quando si crea l'elemento). Forse deve essere in minuscolo per essere riconosciuto (quindi potrebbe essere necessario creare un altro oggetto per il test). Inoltre, hai fatto qualche test con skus non gestito? – ProjectJourneyman

+0

P1 è lo sku, la lettera maiuscola non influisce sui risultati (ho provato con nomi diversi). Aggiunto altro skus ma nulla cambia. –

4

Ho anche avuto questo problema, ma è stato risolto una volta ho cancellato i dati dell'app per Google Play applicazione. Utilizzo di adb:

adb shell pm clear com.android.vending 
+0

ha funzionato per me! Grazie – Crisic

1

Credo che questo stia accadendo a causa della memorizzazione nella cache nell'app Google Play. Di solito, la cache dell'app Google Play si aggiorna una volta ogni 24 ore.

La soluzione di @ poqueque funziona se si desidera cancellare la cache tramite la riga di comando. Puoi anche accedere alle impostazioni delle app sul telefono e cancellare i dati/la cache dell'app Google Play. Assicurati di accedere nuovamente al tuo account Google Play dopo averlo fatto.

Qualcuno conosce una soluzione per forzare l'aggiornamento della cache di Google Play tramite codice o effettuare query sugli acquisti senza utilizzare la cache per ottenere informazioni aggiornate?

Problemi correlati