la verifica dell'acquisto della fatturazione dell'applicazione Android non è rioutput

Ho difficoltà ad attuare la fatturazione dell'applicazione nella mia applicazione Android. sto ottenendo una verifica della firma dell'acquisto fallita. In una prima volta ho duro era la chiave base64 ma ho controllato molte volte e sto ancora ottenendo l'errore, poi dopo aver preso un'occhiata al file Security.java e ho trovato questo metodo che ho modificato per get alcune informazioni di quello che era sbagliato:

public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) { if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) || TextUtils.isEmpty(signature)) { if(TextUtils.isEmpty(signedData)) Log.d(TAG, "SIGNED DATA EMPTY"); if(TextUtils.isEmpty(base64PublicKey)) Log.d(TAG, "KEY IS EMPTY"); if(TextUtils.isEmpty(signature)) Log.d(TAG, "SIGNATURE IS EMPTY"); Log.e(TAG, "Purchase verification failed: missing data."); return false; } PublicKey key = Security.generatePublicKey(base64PublicKey); return Security.verify(key, signedData, signature); } 

E sto ottenendo "la firma è vuota". Anche dopo aver seguito i passaggi riportti di seguito: -Scrivere l'apk con il mio tasto di rilascio – caricarlo come un progetto – installarlo su un dispositivo con "adb -d install app.apk"

  • Errore di logcat: "addView (Visualizza, LayoutParams) non è supportto in AdapterView" in un ListView
  • Chiamare un path di file dalla cartella di lavoro di androidi
  • Come aggiornare l'elenco di liste di Android?
  • Problemi di importzione di progetto in Android Studio per ActionBarSherlock
  • Come sviluppare plugin per il browser Android nativo
  • Caricamento di immagini diverse nell'elenco per l'adattamento personalizzato
  • Sto provando con acquisti reali. Grazie.

    Modifica Il stream di acquisto è soddisfacente, ho l'errore quando chiamo queryInventoryAsync

  • come posso impostare più ascoltatori per un evento?
  • Uccidere l'applicazione android da task manager uccide i servizi avviati da app
  • retrofit + okhttp: Recupera GZIPInputStream
  • Android: Richiesto di Https
  • CSRF nelle applicazioni mobili
  • Android Creare il button in modo dinamico e riempire il layout
  • 4 Solutions collect form web for “la verifica dell'acquisto della fatturazione dell'applicazione Android non è rioutput”

    Sostituisci il metodo verifyPurchase() con uno sotto. Utilizza il vecchio codice indicato di seguito, lo sviluppatore google sta tentando di risolvere questo errore nel prossimo futuro ma prima di aggiornare il codice che preferisci sotto il codice.

      public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) { if (signedData == null) { Log.e(TAG, "data is null"); return false; } boolean verified = false; if (!TextUtils.isEmpty(signature)) { PublicKey key = Security.generatePublicKey(base64PublicKey); verified = Security.verify(key, signedData, signature); if (!verified) { Log.w(TAG, "signature does not match data."); return false; } } return true; } 

    controlla questo collegamento per ulteriori informazioni:

    La fatturazione dell'applicazione non funziona dopo l'aggiornamento – Google Store

    Utilizzare provare a sostituire il metodo verifyPurchase() OLD CODE nel progetto. Ma dovrebbe accadere solo quando si tenta di acquistare prodotti di prova. Fammi sapere anche per l'acquisto di prodotti reali anche dopo aver utilizzato questo codice.

    Edit:

    Perché succede perché non riceveremo alcuna firma mentre usiamo il prodotto fittizio come "android.test.purchased". Quindi nel vecchio codice funziona bene perché siamo tornati vero anche se la firma non è data e per il codice Nuovo stiamo restando falsi.

    ulteriori informazioni sui dati della firma null o blank da link1 e link2

    Quindi, vi suggerisco di sostituire solo il metodo di vecchio codice verifyPurchase() invece del metodo New Code.

    Penso che il nuovo codice funziona bene per il prodotto reale, ma non nel prodotto fittizio. Ma non ho ancora provato il vero prodotto.

    o

    utilizzare la risposta di GvS per il test acquista anche la buona soluzione per il nuovo codice.

    Spero che risolverà il tuo problema.

    È ansible utilizzare i test SKU per eseguire i test, come illustrato qui . Questi sono:

    • android.test.purchased
    • android.test.canceled
    • android.test.refunded
    • android.test.item_unavailable

    Questi acquisti avranno successo (alless l'android.test.purchased) anche nello scenario di test e debug, senza la necessità di annullare l'acquisto.

    Nella verificaPurchase ho cambiato il return false a:

      Log.e(TAG, "Purchase verification failed: missing data."); if (BuildConfig.DEBUG) { return true; } return false; 

    ma dovresti essere consapevole di utilizzare questo solo nello scenario del test.

    Questo restituirà true se si dispone di una creazione di debug e manca i dati della firma. Dal momento che BuildConfig.DEBUG sarà falso in una generazione di produzione questo dovrebbe essere OK. Ma è meglio rimuovere questo codice dopo che tutto è debug.

    Assicurati di essere connessi con l'utente giusto sul tuo telefono o, ad esempio, aggiungere l'account Google del tuo cellulare come utente di test nella console di sviluppatori.

    http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-static :

    In alcuni casi, gli elementi riservati possono restituire risposte statiche firmate, che consentono di verificare la verifica della firma nell'applicazione. Gli elementi riservati restituiscono solo le risposte firmate se l'utente che esegue l'applicazione dispone di un account di sviluppatore o di test.

    impostare il valore di return a true In

     public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) { return true; } 

    dopo aver deciso di annullare la modifica

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.