Hash chiave per l'app Android-Facebook


229

Sto lavorando su un'app Android, in cui voglio integrare una funzione di pubblicazione su Facebook. Ho scaricato l'SDK di Facebook-Android e ho ottenuto il file readme.md (file di testo), in cui è menzionato per generare l'hash chiave per Android. Come lo generi?


2
puoi controllare questo link javatechig.com/2012/12/10/…
Nilanchal

2
controlla questo Per coloro che stanno ancora affrontando il problema,
Chintan Khetiya il

Genera HashKey per il debug e la modalità di rilascio usando questo. stackoverflow.com/questions/7506392/…
Naeem Ibrahim

Per ottenere le chiavi guarda questo video
Presto Santos il

Risposte:


310

Ecco i passaggi

  1. Scarica openssl dal codice di Google (se hai una macchina a 64 bit devi scaricare openssl-0.9.8e X64 non l'ultima versione)

  2. Estrai. crea una cartella OpenSSL in C: / e copia qui il codice estratto.

  3. rileva il percorso del file debug.keystore. Se non lo hai trovato, fai una ricerca in C: / e usa il percorso nel comando nel passaggio successivo.

  4. rileva il tuo percorso keytool.exe e vai a quel dir / nel prompt dei comandi ed esegui questo comando in 1 riga-

    $ keytool -exportcert -alias androiddebugkey -keystore "C: \ Documents and Settings \ Administrator.android \ debug.keystore" | "C: \ OpenSSL \ bin \ openssl" sha1 -binary | "C: \ OpenSSL \ bin \ openssl" base64

    • chiederà la password, mettere Android
    • È tutto. otterrai un key-hash

Per maggiori informazioni visita qui


5
Questa risposta ha funzionato quasi per me su Win7 x64. Tuttavia, il certificato codificato risultante era errato. La risposta di Bryan Bedard riportata di seguito produrrà il valore di certificato corretto. Immagino che il colpevole sia il tubo su Windows.
Walt Armor,

10
Nota per utenti a 64 bit: funziona con la versione openssl-0.9.8e X64, non utilizzabile solo con openssl-0.9.8k X64
Nicola Peluchetti,

Ho scaricato openssl-0.9.8e X64 per il mio sistema e l'ho estratto. Non contiene nient'altro che un file con alcuni dati. Per favore aiutami a saperne di più.
Ravikiran,

2
il comando deve essere eseguito nella cartella bin di java nei sistemi Windows.
Antrromet,

1
@HanishSharma Prova a tralasciare il $.
divieto di geoingegneria il

241

[EDIT 2020] -> Ora consiglio vivamente la risposta qui , molto più semplice usando Android Studio, più veloce e senza bisogno di scrivere alcun codice - quello qui sotto era tornato nei giorni dell'eclissi :) -.

Puoi usare questo codice in qualsiasi attività. Registrerà l'hashkey nel logcat, che è la chiave di debug. Questo è facile ed è un sollievo rispetto all'utilizzo di SSL.

PackageInfo info;
try {
    info = getPackageManager().getPackageInfo("com.you.name", PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md;
        md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        String something = new String(Base64.encode(md.digest(), 0));
        //String something = new String(Base64.encodeBytes(md.digest()));
        Log.e("hash key", something);
    }
} catch (NameNotFoundException e1) {
    Log.e("name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
    Log.e("no such an algorithm", e.toString());
} catch (Exception e) {
    Log.e("exception", e.toString());
}

È possibile eliminare il codice dopo aver conosciuto la chiave;)


27
Ragazzi, state attenti, dopo aver creato l'apk, l'hash della chiave è cambiato! perché usando questo codice ottieni l'hash del keystore di debug, ma quando crei l'apk, è un altro hash, devi catturarlo dal registro dopo aver provato il tuo apk sull'emulatore, quindi eliminare il codice ed esportarlo di nuovo senza questo registro :) - So che è una seccatura: D, ma per me è stato più facile del keytool, buona fortuna;)
Bassem Wissa,

4
Opensssl crea sempre problemi. Questo metodo è il migliore. Basta creare un'app vuota e ottenere la chiave stampata, Usala. Grazie uomo!!
AnhSirk Dasarp,

1
Questa è di gran lunga la soluzione più semplice. Usando il keytoolcomando stavo ottenendo gli hash chiave sbagliati (non ho idea del perché, ho deciso che non mi interessava abbastanza indagare). Questo ha funzionato e ha impiegato letteralmente 5 minuti per ottenere il debug e rilasciare gli hash delle chiavi. +1
Chris Cirefice,

1
Sì Sebastien, devi solo installare l'apk firmato su un dispositivo collegarlo a Android Studio e controllare il log cat, oppure puoi mostrare l'hash in un edittext nell'interfaccia utente e copiarlo, comunque sì l'hash con cui questo codice produce funziona l'apk firmato :)
Bassem Wissa il

1
usare keytool è un tale casino, questo è davvero semplice
Tabish

135

Ho creato un piccolo strumento per Windows e Mac OS X. Basta inserire il file keystore e ottenere la chiave hash.

Se si desidera il file debug.keystore predefinito, utilizzare l'alias e la password predefiniti. Altrimenti, usa il tuo file keystore e i tuoi valori.

Dai un'occhiata, scarica la versione per Windows o scarica la versione per Mac OS X. (Dev-Host potrebbe non essere attivo a volte ... quindi se il link non funziona, PM me e lo riparerò).

Spero che ti aiuti ragazzi ...

31 dic 2014 - EDIT: Host modificato in AFH. Per favore fatemi sapere se i collegamenti sono interrotti

21 nov 2013 - MODIFICA:

Come richiesto dagli utenti, ho aggiunto un percorso di memorizzazione delle chiavi predefinito e un pulsante DONA. Sentiti libero di usarlo se ti ho aiutato. :)

Immagine dello schermo Schermata 2


1
Migliore. Metodo. Mai. Dov'è il pulsante di donazione?
Adam Varhegyi,

1
@ Shahar2k5 Non lo so davvero, ricominciato e ha funzionato come un fascino. Siamo spiacenti
Anearion, il

1
Funziona come un fascino! Grazie per la condivisione :)
Vinayak,

1
@Shahar Barsheshet Grazie. hai ragione. Scaricato dal dominio Devhost e nessun problema affrontato.
MajorGeek,

1
Non capisco qualcosa: perché il tuo strumento fornisce chiavi SHA diverse rispetto all'utilizzo della keytoolriga di comando? Non dovrebbe produrre risultati identici, se applicato allo stesso file di archivio chiavi?
Risolto il

64

Le istruzioni attualmente presenti nel Tutorial Android di Facebook non funzionano bene in Windows . Il loro esempio mostra come reindirizzare l'output del keytool su openssl ma se provi questo in Windows l'output non è valido per qualche motivo. Ho scoperto che dovevo usare i file intermedi per farlo funzionare correttamente. Ecco i passaggi che hanno funzionato per me:

Inizia scaricando openssl per Windows da Google.

C:\Users\Me>keytool -exportcert -alias my_key -keystore my.keystore -storepass PASSWORD > mycert.bin

C:\Users\Me>openssl sha1 -binary mycert.bin > sha1.bin

C:\Users\Me>openssl base64 -in sha1.bin -out base64.txt

Dopo aver eseguito questi comandi, l'hash valido viene archiviato nel file base64.txt. Copia e incolla questo nelle impostazioni della tua app su Facebook.


Funziona perfettamente, tutto il resto stava fallendo.
Oliver Dixon,

2
Che PITA - ma Bryan ha ragione! Il comando genererà un hash quasi non importa quale sia, se il tuo percorso è sbagliato, la password è sbagliata o le pipe non funzionano bene - ANCORA TUI RICEVERAI UN HASH ma non funzionerà. Quindi (su Windows) ho abbandonato Powershell e ho provato Cygwin - ancora non funzionava. Solo dopo aver copiato il file debug.keystore nella directory di lavoro ho potuto farlo funzionare e funzionare !!
Bobby,

2
Quindi, in sintesi, su Windows, utilizzare la tecnica di Bryan per romperlo, oppure utilizzare cygwin con il file del keystore nella directory di lavoro: keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64 Se non richiede una password, non trova correttamente il file del keystore.
Bobby,

Ha funzionato perfettamente per me. Bella risposta.
Ron,

Se vuoi evitare di ottenere hash per casi di password errati, controlla mycert.bin prima di continuare con openSSL. Altrimenti avresti il ​​codice di errore della password errata :)
Vaiden

50

Questo è ciò che viene dato sulla pagina ufficiale di Facebook :

   keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Vorrei suddividere questo comando in frammenti.

  1. Cercare "keytool.exe". Puoi cercarlo sull'unità C :. Puoi trovarlo in "java jdk"o "java jre". Se hai installato più versioni, sceglierne una qualsiasi.

  2. Apri un prompt CMD e vai alla directory sopra dove hai trovato "keytool.exe".

    Clip "exe`" e incolla il comando precedente fornito sulla pagina Facebook.

  3. Quando si immette questo errore, si noterà che OpenSSL non è riconosciuto come nel comando input output. Soluzione: Scarica "Openssl" da OpenSSL (se hai una macchina a 64 bit devi scaricare openssl-0.9.8e X64 ). Estrai e salvalo ovunque ... L'ho salvato sull'unità C: nella OpenSSlcartella

  4. Sostituisci openssl nel comando precedente in cui si riceveva un errore di OpenSSL con "C: \ OpenSSL \ bin \ openssl" in entrambi i punti dopo la pipe "|".

  5. Se viene richiesta una password, inserire android.

E otterrai la tua chiave hash. Per ulteriori passaggi, fare di nuovo riferimento alla pagina Facebook.


32

Aggiungi questo codice alla onCreatetua attività, stamperà l'hash sotto il tag KeyHash in logCat

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           getPackageName(),
                           PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
}
catch (NameNotFoundException e) {

}
catch (NoSuchAlgorithmException e) {

}

Puoi aggiungere più hashkey per il tuo account, quindi se hai eseguito il debug non dimenticare di eseguirlo di nuovo in modalità di rilascio .


ottima soluzione, suppongo che non ci dovrebbe essere una versione eseguibile senza segno? la versione non firmata non può essere installata su alcun dispositivo. Quelle versioni di debug sono firmate con il keystore di debug :)
benleung,

26

Per ottenere il codice hash chiave Android, attenersi alla seguente procedura:

  1. Scarica OpenSSL per Windows qui
  2. Ora decomprimi sull'unità C.
  3. Apri un prompt CMD
  4. genere cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. Quindi digitare solo keytool -export -alias myAlias -keystore C:\Users\il nome utente\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. Fatto

2
Bella risposta. Grazie mille.
Palani Kumar,

1
È per la chiave di debug o per la chiave di rilascio?
IgorGanapolsky,

@IgorGanapolsky invece del percorso di myKeyStore, indica il percorso della chiave di rilascio. Il codice sopra è per la chiave di debug
Pallavi

17

La soluzione più semplice che ho trovato è questa:

  • Apri Log Cat
  • Prova e accedi a Facebook con l'SDK di Android
  • Cerca la riga nel registro che assomigli a questa:

    04-24 01:14:08.605: I/System.out(31395): invalid_key:Android key mismatch. 
    Your key "abcdefgHIJKLMN+OPqrstuvwzyz" does not match the allowed keys specified in your
    application settings. Check your application settings at 
    http://www.facebook.com/developers
  • Copia "abcdefgHIJKLMN + OPqrstuvwzyz" e incollalo nell'area di Android Key Hash di Facebook.


questo è il modo più semplice ed efficace, basta prenderlo dai registri senza nemmeno openssl!
Luca C.

questa è l'unica soluzione funzionante per me !. Non vedo il registro come te, ma lo vedo KeyHash: XWwXXXXX/5xxxxxxxxxxx=nel registro e mi ha aiutato!
Khang Dinh Hoang,

14

È possibile ottenere l'hash della chiave dalla chiave SHA-1. È molto semplice ottenere la chiave SHA-1 (APK firmato) dal controllo Play Store sotto l'immagine.inserisci qui la descrizione dell'immagine

Ora copia quel tasto SHA-1 e incollalo in questo sito http://tomeko.net controlla anche l'immagine qui sotto per ottenere il tuo Key Hash.

inserisci qui la descrizione dell'immagine


1
Grazie. Ho provato a ottenere l'hash chiave usando OpenSSL. Mi ci è voluto per 1 minuto ed è stato facile.
Verde Y.

1
Molte grazie! Questa è stata la soluzione poiché Google sta firmando la mia app ora (utilizzo solo il certificato di caricamento / archivio chiavi)
Harrison

13

Ho fatto così per il sistema operativo Linux e Windows :

Linux:

  • Scarica Openssl
  • Terminale aperto
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

Si prega di cambiare Alias ​​Nome e Keystore con il suo percorso come requisito.

Terminal sarebbe chiedere per la password di archivio chiavi. Devi fornire la password per lo stesso Keystore .

Quindi alla fine otterresti il Release Hashkey .

Finestre:

Passaggi per Release Hashkey :

  • Scarica Openssl (Scarica da qui ), ho scaricato per sistemi operativi a 64 bit , puoi trovare di più qui
  • Estrai il file zip scaricato solo su C: \ drive
  • Apri il prompt dei comandi
  • keytool -exportcert -alias **myaliasname** -keystore **"C:\Users\hiren.patel\Desktop\mykeystore.jks"** | "C:\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary | "C:\openssl-0.9.8e_X64\bin\openssl.exe" base64

Si prega di cambiare Alias ​​Nome e Keystore con il suo percorso come requisito.

Nota:

Si prega di inserire i dettagli dove ho segnato tra ** **.

Terminal sarebbe chiedere per la password di archivio chiavi. Devi fornire la password per lo stesso Keystore .

Quindi alla fine otterresti il Release Hashkey .

Fatto


qual è la password qui?
Akash Bisariya,

@AkashBisariya, password del keystore, che hai fornito durante la creazione del keystore.
Hiren Patel,

Dove posso trovare la chiave dopo averla generata con successo?
Anand Phadke,

11
  • scarica openSSL per Windows qui puoi trovare 64 bit e 32 bit qui

  • estrarre il file scaricato

  • crea il nome della cartella openSSL nell'unità C.
  • copia tutti gli elementi estratti nella cartella openSSL (bin, include, lib, openssl.cnf)
  • ottenere il keystore di debug Android, sarà la posizione predefinita

C: \ Users \ nome utente \ .android \ debug.keystore

  • ora ottieni il prompt dei comandi e incolla questo codice

keytool -exportcert -alias androiddebugkey -keystore C: \ Users \ username.android \ debug.keystore | "C: \ openSSL \ bin \ openssl" sha1 -binary | "C: \ openSSL \ bin \ openssl" base64

  • premi invio e otterrai il codice chiave di 28 cifre

NO richiede password. digitando si androidottiene un hash di 24 cifre e digitando si aottiene un hash di 28 cifre. Non ho idea del perché!
sud007,

cattivi collegamenti! non hanno affatto il keytool
KawaiKx,

6

È necessario creare un keystore dal keytool per app firmate per Android come la procedura descritta nel sito Android e quindi è necessario installare Cygwin e quindi è necessario installare openssl dal codice di Google quindi eseguire il comando seguente e si otterrà l'hash chiave per Android e quindi inserisci quella chiave hash nell'applicazione Facebook che hai creato. E quindi è possibile accedere all'applicazione Facebook tramite l'applicazione Android per la pubblicazione di wall ("publishing_stream") potrebbe essere un esempio.

$ keytool -exportcert -alias nome_alias -keystore sample_keystore.keystore | openssl sha1 -binary | openssl base64

È necessario eseguire il comando sopra da cygwin.


6

Scarica openSSL -> Installa -> di solito si installa in C: \ OpenSSL

quindi apri cmd e digita

cd../../Program Files (Enter)

java (Enter)

dir (Enter)

cd jdk1.6.0_17 (varies with jdk versions) (Enter)

per controllare la versione di jdk vai su C: / program files / java / jdk_version

cd bin (enter)

keytool -exportcert -alias androiddebugkey -keystore C:Users\Shalini\.android\debug.keystore | "C:\OpenSSL\bin\openssl sha1 -binary | "C:\OpenSSL\bin\openssl base64 (Enter)

Ti chiederà la password che è Android.


6
  1. Basta aprire il file di attività principale e creare la funzione di seguito menzionata:

         try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "your.application.package.name",
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (PackageManager.NameNotFoundException e) {
    
    } catch (NoSuchAlgorithmException e) {
     }

1.1 Esegui l'applicazione, questo genererà una chiave hash per la tua applicazione.

  1. Ora, apri log cat e cerca con "KeyHash" e copia la chiave hash.

  2. Una volta generato il tasto Hash è possibile rimuovere questa funzione.


5

1) Crea una chiave per firmare la tua applicazione e ricorda l'alias.

2) Installa OpenSSL.

3) Inserisci la cartella bin di OpenSSL nel tuo percorso.

4) Seguire la procedura di cui al "Setup Single Sign-On" sul FB-Android-SDK pagina , e generare il tasto cancelletto. Assicurati di inserire l'alias e il nome file del keystore corretti.

5) Crea un'applicazione su Facebok e, nella scheda Dispositivi mobili, inserisci questo tasto cancelletto.


5

Documentazione ufficiale sul sito degli sviluppatori di Facebook :

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.facebook.samples.hellofacebook", 
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

@WilliamKinaan: sempre;): P
Hardik Thaker,

@HardikThaker Ho usato il tuo codice, mi dà esattamente lo stesso keyhash che ho ottenuto usando il terminale con questo comando keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64e sto ancora ricevendo l'hash della chiave non corrisponde a nessun hash della chiave memorizzata
Shan Xeeshi,

4
keytool -exportcert -alias androiddebugkey -keystore       C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64

Questo ha funzionato per me ...

passi:

1) Open command line go to - > java Keytool..... for me C:\Program Files\Java\JDK1.7\bin
2) Download OpenSSL from google
3) paste this with changing your paths -
   keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64 

    ....................   give proper debug.keystore path and openSSL path .. 

4) Finley it may be ask u password .. so give password -> android   ...
5) you will get 28 characters that will be your has key

4

Per Linux

Terminale aperto:

Per il debug Build

keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64

troverai debug.keystore dalla cartella ".android" copiandolo e incollandolo sul desktop ed eseguendo il comando sopra

Per il rilascio Build

keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64

NOTA: assicurarsi che in entrambi i casi sia necessario richiedere la password. Se non richiede la password, significa che qualcosa non va nel comando.


Ricevo valori diversi con un nome alias diverso, come verificare quale è corretto?
Javal Nanda,

chiedendo la password con entrambi il nome alias?
Biraj Zalavadia,

ya e qualunque password inserisca mi viene data la chiave hash .. la mia app è già su Play Store e l'FB nativo non funziona ora. Dovrò comunque generare l'hash chiave esatto per la build di rilascio. Gli sviluppatori stanno suggerendo di inserire il codice all'interno del onCreate nel seguente post, ma voglio farlo funzionare senza aggiornamento app su playstore stackoverflow.com/questions/15021790/...
Javal Nanda

sì, c'è un problema con le vedove con openssl. È possibile ottenere con il codice specificato in quel post.
Biraj Zalavadia,

Se vuoi fare a meno dell'aggiornamento sul playstore. 1) Crea nuova app Android Demp. 2) Inserisci quel pezzo di codice su create. 3) firma questa app demo con lo stesso keystore della tua app su app store 4) Quindi esegui questo apk firmato 5) E usa finalmente questa chiave hash
Biraj Zalavadia,

4

Per un'applicazione Android

Questo codice viene utilizzato per ottenere la chiave hash nell'applicazione Android per l'integrazione di Facebook. Ho testato tutti i dispositivi e funziona. Cambia solo il nome del pacchetto di questo codice:

private void facebookHashKey() {

    try {
        PackageInfo info = getPackageManager().getPackageInfo("com.app.helpcove", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashCode  = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            System.out.println("Print the hashKey for Facebook :"+hashCode);
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}

4

Come ho risposto a un problema simile, ho scoperto che funzionava per me:

  • Copia il apkname.apkfile di cui vuoi conoscere l'hash nella cartella ' Java \ jdk1.7.0_79 \ bin '
  • Esegui questo comando keytool -list -printcert -jarfile apkname.apk
  • Copia il SHA1valore e convertilo utilizzando questo sito
  • Usa il valore Keyhash convertito ( es. ZaHqo1xcaPv6CmvlWnJk3SaNRIQ = )

3

La soluzione più semplice:

  1. Non aggiungere la chiave hash, implementa tutto il resto
  2. Quando si preme il login di Facebook, verrà visualizzato un messaggio di errore "Hash chiave non valido. L'hash chiave" xxx "non corrisponde a nessuna chiave memorizzata. ..."
  3. Apri la dashboard dell'app di Facebook e aggiungi l'hash "xxx =" (hash "xxx" dall'errore + "=")

3

Per generare un hash della chiave di rilascio, eseguire il comando seguente su Mac o Windows sostituendo l'alias della chiave di rilascio e il percorso del keystore.

Su Windows, utilizzare:

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

Questo comando dovrebbe generare una stringa di 28 caratteri. Ricorda che COPIA e INCOLLA questo hash della chiave di rilascio nelle impostazioni Android dell'ID app di Facebook.

immagine: fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1803108402_n.png

Fare riferimento a: https://developers.facebook.com/docs/android/getting-started#release-key-hash e http://note.taable.com


3

Usalo per l'hash del tasto di stampa in kotlin

try {
        val info = context.getPackageManager().getPackageInfo(context.packageName,
                PackageManager.GET_SIGNATURES);
        for (signature in info.signatures) {
            val md = MessageDigest.getInstance("SHA")
            md.update(signature.toByteArray())
            Log.d("Key hash ", android.util.Base64.encodeToString(md.digest(), android.util.Base64.DEFAULT))
        }
    }catch (e:Exception){

    }

2

Risolto il mio anche in Android Studio ma con un approccio leggermente diverso.

Per ottenere il valore SHA-1 in Android Studio.

  1. Fai clic su Gradle
  2. Fai clic su Rapporto di firma
  3. Copia SHA-1

Fai clic sul pannello contrassegnato in Android Studio

  1. Il valore SHA-1 assomiglia a questo CD: A1: EA: A3: 5C: 5C: 68: FB: FA: 0A: 6B: E5: 5A: 72: 64: DD: 26: 8D: 44: 84

    e apri http://tomeko.net/online_tools/hex_to_base64.php per convertire il valore SHA1 in base64. Questo è ciò che richiede Facebook ottenere l'hash generato "******************** =" e copiare l'hash della chiave sulla console dell'app di Facebook.

Parte di questa risposta è presa da qui Github Link


2

Sono disponibili due metodi , uno complesso e uno semplice

Metodi Uno: (poco complesso)

prima di tutto devi scaricare ssl 64bit o di 32bitconseguenza, ricorda di scaricare il file con il nome che contiene edopo il codice della versione openssl-0.9.8e_X64.zip OPPURE opensl-0.9.8e_WIN32.zip non con il kdopo il codice della versione,

e posizionalo nella directory AndroidStudio / jre / bin, se non sai dove posizionare, puoi trovare questa directory facendo clic destro sul collegamento Android Studio come:

inserisci qui la descrizione dell'immagine

ora hai gestito due cose richieste in un unico posto, ma devi ancora trovare il percorso per il tuo debug.keystore, che puoi sempre trovare in "C:\Users\yourusernamehere\.android\debug.keystore",

NOTA Se l'app è già stata pubblicata o sta per essere pubblicata, utilizzare il keystore di firma di pubblicazione, se e solo se si sta eseguendo il test in modalità di sviluppo di quanto sia possibile utilizzare debug, keysotre

Poiché tutto è configurato, lascia che sia il comando che desideri eseguire per la generazione della chiave hash base64 formate il tuo comando sarà simile a questo

keytool.exe -exportcert -alias androiddebugkey -keystore "C:\Users\ayyaz talat\.android\debug.keystore" | "D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" sha1 -binary |"D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" base64

ti verrà chiesto di inserire una password per debug.keystore, che è Android per impostazione predefinita. se stai usando la tua chiave, la password sarà anche la tua. l'output apparirà così se tutto va bene come previsto, spero che possa essere d'aiuto

inserisci qui la descrizione dell'immagine

Secondo metodo (Rispettivamente facile)

se non si desidera eseguire tutte le procedure sopra descritte, utilizzare il metodo seguente per registrare l'hashkey:

 private void printKeyHash() {
        try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("KeyHash:", e.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("KeyHash:", e.toString());
        }
    }

produzione:

inserisci qui la descrizione dell'immagine


1

L'approccio migliore è utilizzare il seguente codice:

private void getHashKey(String pkgName)
{
    try
    {
        PackageInfo info = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures)
        {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashKey = Base64.encodeBytes(md.digest());
            _hashKey_et.setText(hashKey);
            Log.i("KeyTool", pkgName + " -> hashKey = " + hashKey);
        }
    }
    catch (NameNotFoundException e)
    {
        e.printStackTrace();
    }
    catch (NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }
}

Ma ero così frustrato dal fatto che non esiste uno strumento semplice per generare l'HashKey per l'app di Facebook. Ogni volta che dovevo giocare con Openssl e Keytool o usare un codice per ottenere l'hash dalla firma ...

Quindi ho scritto un semplice KeyGenTool che farà al caso tuo: -> KeyGenTool su Google Play <-

Godere :)


1

Ho fatto un piccolo errore che dovrebbe essere tenuto presente. Se stai usando il tuo keystore, dai il tuo nome alias, non androiddebugkey ...

Ho risolto il mio problema Ora se Facebook è lì installato sul mio dispositivo, allora la mia app sta ancora ottenendo dati sull'integrazione dell'accesso a Facebook. Preoccupati solo della tua chiave hash.

Vedi sotto.

C:\Program Files\Java\jdk1.6.0_45\bin>keytool -exportcert -alias here your alias name  -keystore "G:\yourkeystorename.keystore" |"G:\ssl\bin\openssl" sha1 -binary | "G:\ssl\bin\openssl" base64

Quindi premi Enter- ti chiederà la password e quindi inserisci la password del keystore, non Android.

Freddo.


0
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.text.Editable;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    Button btn;
    EditText et;
    PackageInfo info;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn=(Button)findViewById(R.id.button1);
        et=(EditText)findViewById(R.id.editText1);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                try {
                    info = getPackageManager().getPackageInfo("com.example.id", PackageManager.GET_SIGNATURES);
                    for (Signature signature : info.signatures) {
                        MessageDigest md;
                        md = MessageDigest.getInstance("SHA");
                        md.update(signature.toByteArray());
                        String something = new String(Base64.encode(md.digest(), 0));
                        //String something = new String(Base64.encodeBytes(md.digest()));
                        et.setText("" + something);
                        Log.e("hash key", something);
                    }
                } catch (NameNotFoundException e1) {
                    Log.e("name not found", e1.toString());
                } catch (NoSuchAlgorithmException e) {
                    Log.e("no such an algorithm", e.toString());
                } catch (Exception e) {
                    Log.e("exception", e.toString());
                }
            }
        });
    }



}

Questo codice non genera una chiave hash valida per me. La risposta di @ Jamshid funziona per me su Mac OSX.
Loolooii,

0

Codice Kotlin per ottenere la chiave hash

 private fun logHashKey() {
    try {
        val info = getPackageManager().getPackageInfo("your.package.name", PackageManager.GET_SIGNING_CERTIFICATES);
        for (signature in info.signingInfo.signingCertificateHistory) {

            val md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            val something = Base64.getEncoder().encodeToString(md.digest());
            Log.e("hash key", something);
        }
    } catch (e1: PackageManager.NameNotFoundException) {
        Log.e("name not found", e1.toString());
    } catch (e: NoSuchAlgorithmException) {
        Log.e("no such an algorithm", e.toString());
    } catch (e: Exception) {
        Log.e("exception", e.toString());
    }
}

Non dimenticare di generare le chiavi nell'ambiente Debug and Release poiché cambiano come da impostazione di compilazione.


0

prova questo :

  • due modi per ottenere il valore della chiave hash

1) ottieni la chiave hash utilizzando la riga di comando (Doc ufficiale: https://developers.facebook.com/docs/android/getting-started )

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

O

2) ottieni la chiave hash usando il codice

  @Override
   protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);

            //Hask Kay generation 
             GetKeyHase();
    }

    private void GetKeyHase() {
            try {
                PackageInfo info = getPackageManager().getPackageInfo("ADD YOUR PACKAGE NAME", PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md = (MessageDigest.getInstance("SHA"));
                    md.update(signature.toByteArray());
                    String hashkey_value = new String(Base64.encode(md.digest(), 0));
                    Log.e("hash key", hashkey_value);
                    //check you logcat hash key value
                }
            }catch (Exception e) {
                Log.e("exception", e.toString());
            }
        }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.