2014-12-12 14 views
23

Sto costruendo un'app in cui gli utenti possono accedere con Facebook.Android Facebook SDK: genera l'hash key di rilascio

Ho creato le chiavi di hash come segue:

try { 
     PackageInfo info = getPackageManager().getPackageInfo(
     "com.app.package", 
     PackageManager.GET_SIGNATURES); 
     for (Signature signature : info.signatures) { 
     MessageDigest md = MessageDigest.getInstance("SHA"); 
     md.update(signature.toByteArray()); 
     Log.d("KeyHash", "KeyHash:"+ Base64.encodeToString(md.digest(), 
     Base64.DEFAULT)); 
     Toast.makeText(getApplicationContext(), Base64.encodeToString(md.digest(), 
       Base64.DEFAULT), Toast.LENGTH_LONG).show(); 
     } 
     } catch (NameNotFoundException e) { 

     } catch (NoSuchAlgorithmException e) { 

     } 

In modalità di debug, tutto funziona bene.

Quando ho esportare il progetto per il rilascio, dà questo errore:

"Invalid key hash. The key hash ****************** does not match any stored key hashes" 

incollo la chiave stampata in Facebook Developer cruscotto, ma l'applicazione mi dà ancora quell'errore.

Il pacchetto completo di my actvity è "com.app.package.views" e ho provato a utilizzare questo pacchetto (come Nome pacchetto Google Play) nella dashboard, ma non è cambiato nulla.

Come posso risolverlo? Come posso generare il giusto hash della chiave di rilascio?

risposta

34

Hai seguito i passaggi che facebook fornisce per la creazione di un'applicazione di accesso?

Hai bisogno di un 'Produzione keyhash' ottenuto iniziare la vostra chiavi di rilascio:

Dalla linea di comando:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64 

e aggiungere questa chiave sulle opzioni pagina facebook app.

Maggiori informazioni: https://developers.facebook.com/docs/android/getting-started/

+1

ciò che è media da

+1

Penso che sia solo un alias o un nome da utilizzare durante la generazione di chiavi Hash –

+2

mi puoi dire dove ho eseguito questo comando, perché quando lo eseguo mi dice che "keytool" non è riconosciuto come comando interno o esterno, programma operativo o file batch. – Tefa

1

Facebook SDK utilizza due chiavi diverse, una è la chiave di debug che è possibile utilizzare durante la fase di sviluppo e un'altra chiave di rilascio che viene utilizzata dopo aver creato un pacchetto di applicazioni firmato. Ecco un collegamento su come creare chiavi di debug e release.

Developer.Facebook

controllare anche this SO posta.

6

abbiamo bisogno di sostituire la parola "OpenSSL" dal percorso di un file all'interno della struttura OpenSSL.

così, il mio comando CMD è:

C:\Program Files\Java\jre1.8.0_45\bin>keytool -exportcert -alias Informatheus -keystore C:\Users\Atendimento\Dropbox\AndroidKeystore\Keystore | C:\Users\Atendimento\Desktop\openssl\bin\openssl sha1 -binary | C:\Users\Atendimento\Desktop\openssl\bin\openssl base64 

Ha funzionato.

29

Trovo una soluzione. per MAC

Utilizzare questo per ottenere YOUR_RELEASE_KEY_ALIAS:

keytool -list -keystore /Users/***/Documents/keystore/***.jks 

e questo per ottenere il vostro keyhash rilascio:

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore /Users/***/Documents/keystore/***.jks | openssl sha1 -binary | openssl base64 

Funziona per me.

+2

Funziona come un fascino! Sorpreso che non ci sono più upvotes. – northernman

+1

@northernman perché la risposta sopra è solo per MAC –

-1
keytool -exportcert -alias aliasName -keystore C:\my_release_keystroke_info.jks | openssl sha1 -binary | openssl base64 
+1

Potresti aggiungere una spiegazione su cosa fa e come aiuta? – Wtower

+0

Questa sembra essere solo una ripetizione delle risposte esistenti - [Dalla revisione] (http://stackoverflow.com/review/low-quality-posts/12894956). – Pang

17

La soluzione più semplice.

1) Firma il tuo Apk.

2) Collegare il dispositivo alla macchina e installare l'apk firmato sul dispositivo reale.

3) Quando viene premuto il login di Facebook, viene visualizzato un messaggio di errore "Hash della chiave non valido. L'hash della chiave" xxx "non corrisponde a nessuna chiave memorizzata. ..." sul logcat.

4) Copiare il logcat Hash chiave e mettere questo tasto per developers.facebook.com/apps/104...../settings/

+0

Questa è una soluzione semplice. – saintjab

+0

: D smart solu .. – mohnage7

+1

semplicissimo. –

1

// aggiungere questo metodo per la prima attività e di registro aperto e Ricerca per tag Base64 questo è il HashKey i Hoop è aiutare

public void getHashkey(){ 
    try { 
     PackageInfo info = getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), PackageManager.GET_SIGNATURES); 
     for (Signature signature : info.signatures) { 
      MessageDigest md = MessageDigest.getInstance("SHA"); 
      md.update(signature.toByteArray()); 

      Log.i("Base64", Base64.encodeToString(md.digest(),Base64.NO_WRAP)); 
     } 
    } catch (PackageManager.NameNotFoundException e) { 
     Log.d("Name not found", e.getMessage(), e); 

    } catch (NoSuchAlgorithmException e) { 
     Log.d("Error", e.getMessage(), e); 
    } 
} 
+1

Si prega di evitare le risposte al solo codice e di aggiungere alcune righe di testo descrittivo –

+0

grazie a Matthias S. lo modificherò. –