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"

  • Stile del button in AlertDialogs
  • Errore (-19,0) Mediaplayer
  • Riferisca una risorsa intera per il codice Android versionCode
  • Come get un vCard (file .vcf) nei contatti di Android dal sito web
  • Ciclo di vita degli oggetti statici Android
  • Android Google map v2 nella scheda Sovrapposizione, Multiple map in tab
  • Sto provando con acquisti reali. Grazie.

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

  • È opportuno avere una sola istanza di SQLiteOpenHelper condivisa da tutte le attività in un'applicazione Android?
  • Ricevitore di trasmissione non funziona in ICS se l'applicazione non è stata avviata alless una volta
  • Come generare lo spettrogramma di un file wav in Matlab con frequenza sull'asse x
  • Visualizzazione e navigazione di grandi mappe personalizzate in linea utilizzando Phonegap
  • Interfaccia AIDL tra due applicazioni
  • Differenza tra `initLoader` e` restartLoader` in `LoaderManager`
  • 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.