Sto tentando di rendere un'app gratuita aggiornabile alla versione "a pagamento" utilizzando la fatturazione in-app. Ho utilizzato il codice da this tutorial per gestire la fatturazione poiché quello sul sito dello sviluppatore ufficiale è troppo complesso e disordinato da seguire per un flusso semplice come il mio.fatturazione in-app Android - restoreTransactionInformation
Il mio codice per eseguire l'aggiornamento funziona correttamente.
Il problema si presenta quando provo ad aggiungere qualcosa per verificare se l'utente ha già acquistato ma ha perso i dati di acquisto o reinstallando o cancellando i dati (non mi interessa quale).
All'avvio dell'app, controllo un flag impostato dopo la prima esecuzione. Se questo flag non è presente, all'utente viene visualizzata una finestra di dialogo che avverte che l'app controllerà gli acquisti precedenti e quando fa clic su OK, viene chiamato il metodo restoreTransactionInformation. Ciò quindi fa sì che l'applicazione forzatamente si chiuda.
Poiché la fatturazione in-app non funziona durante il debug o sull'emulatore, devo pubblicare una versione firmata dell'app ogni volta che voglio provare il codice. Non ho modo di sapere perché l'applicazione si chiude quando provo a effettuare la richiesta restoreTransactionInformation. Qualcuno ha la minima idea di come posso diagnosticarlo, o cosa potrebbe causare la morte della mia app? O un esempio funzionante di come utilizzare il metodo restoreTransactionInformation?
MODIFICA: Sembra che la richiesta RESTORE_TRANSACTIONS stia ricevendo una risposta corretta e che restituisca i dettagli del mio acquisto di prova. Sfortunatamente prima che possa fare qualcosa con esso, l'app è costretta a chiudere. Ecco un logcat (senza codice offuscato) di ciò che accade a destra dopo mercato risponde alla richiesta RESTORE_TRANSACTIONS:
I/BillingService(6484): confirmTransaction()
D/Finsky (1884): [7] MarketBillingService.getPreferredAccount: com.hippypkg: Account from first account.
I/BillingService(6484): current request is:**********
I/BillingService(6484): RESTORE_TRANSACTIONS Sync Response code: RESULT_OK
D/WindowManagerImpl(6484): finishRemoveViewLocked, mViews[0]: [email protected]**********
W/InputManagerService(1381): [unbindCurrentClientLocked] Disable input method client.
W/InputManagerService(1381): [startInputLocked] Enable input method client.
D/NativeCrypto(1884): returned from sslSelect() with result 1, error code 2
D/Finsky (1884): [1] MarketBillingService.sendResponseCode: Sending response RESULT_OK for request ********** to com.hippypkg.
I/BillingService(6484): Received action: com.android.vending.billing.PURCHASE_STATE_CHANGED
I/BillingService(6484): purchaseStateChanged got signedData: {"nonce":**********,"orders":[{"orderId":"**********","packageName":"com.hippypkg","productId":"hippy_upgrade_free_to_full","purchaseTime":1331476540000,"purchaseState":0}]}
I/BillingService(6484): purchaseStateChanged got signature: **********==
I/BillingService(6484): signedData: {"nonce":**********,"orders":[{"orderId":"**********","packageName":"com.hippypkg","productId":"hippy_upgrade_free_to_full","purchaseTime":1331476540000,"purchaseState":0}]}
I/BillingService(6484): signature: **********==
I/BillingService(6484): confirmTransaction()
I/BillingService(6484): makerequestbundle success
I/BillingService(6484): putstringarray success
D/Finsky (1884): [24] MarketBillingService.getPreferredAccount: com.hippypkg: Account from first account.
D/AndroidRuntime(6484): Shutting down VM
W/dalvikvm(6484): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)
E/AndroidRuntime(6484): FATAL EXCEPTION: main
E/AndroidRuntime(6484): java.lang.RuntimeException: Unable to start receiver com.hippypkg.BillingReceiver: java.lang.NullPointerException
E/AndroidRuntime(6484): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2144)
E/AndroidRuntime(6484): at android.app.ActivityThread.access$2400(ActivityThread.java:135)
E/AndroidRuntime(6484): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1114)
E/AndroidRuntime(6484): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(6484): at android.os.Looper.loop(Looper.java:150)
E/AndroidRuntime(6484): at android.app.ActivityThread.main(ActivityThread.java:4385)
E/AndroidRuntime(6484): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(6484): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(6484): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
E/AndroidRuntime(6484): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
E/AndroidRuntime(6484): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(6484): Caused by: java.lang.NullPointerException
E/AndroidRuntime(6484): at android.os.Parcel.readException(Parcel.java:1328)
E/AndroidRuntime(6484): at android.os.Parcel.readException(Parcel.java:1276)
E/AndroidRuntime(6484): at com.android.vending.billing.IMarketBillingService$Stub$Proxy.sendBillingRequest(IMarketBillingService.java:100)
E/AndroidRuntime(6484): at com.hippypkg.BillingHelper.confirmTransaction(BillingHelper.java:152)
E/AndroidRuntime(6484): at com.hippypkg.BillingHelper.verifyPurchase(BillingHelper.java:250)
E/AndroidRuntime(6484): at com.hippypkg.BillingReceiver.purchaseStateChanged(BillingReceiver.java:41)
E/AndroidRuntime(6484): at com.hippypkg.BillingReceiver.onReceive(BillingReceiver.java:23)
E/AndroidRuntime(6484): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2103)
E/AndroidRuntime(6484): ... 10 more
W/ActivityManager(1381): Force finishing activity com.hippypkg/.Hippy
Hey there; Hai già trovato una soluzione? Ho appena scoperto questo problema e sono bloccato nello stesso identico posto in cui tu. – Sid
Non così lontano - sfortunatamente mi sono commosso a lavorare su qualcos'altro e non ho avuto la possibilità di guardare. Segui la discussione sulla risposta di Nikolay per il miglior risultato che ho avuto fino ad ora. Fammi sapere se arrivi da qualche parte! – Hippyjim
Risolto, 4 ore e 5 caffè più tardi :) Controlla la risposta. – Sid