MICHELEPISANI.IT
 

Per ottenere il codice di 28 caratteri a fini di test e di pubblicazione

Ottenere una hash key per integrare Facebook in un'app Android

June 07
07:492015

Se si arriva a chiedersi come poter ottenere una hash key per integrare Facebook nelle proprie applicazioni significa che probabilmente, durante il loro sviluppo, vi siete imbattuti nell'errore "This app has no android key hashes configured. Configure your app key hashes at  http: //developers.facebook.com/apps/..." oppure se avete già provato ad inserirne una non valida "Invalid key hash. The key hash … does not match any stored key hashes. Configure your app key hashes at  http: //developers.facebook.com/apps/...".

La soluzione è più semplice di quanto si pensi dato che ponendosi questo problema è certo che avete già installato l'SDK di Android e pertanto è necessario seguire un passaggio già compreso nella guida presente sul sito degli sviluppatori di Facebook, in particolare nella parte relativa al rilascio della hash key (release-key-hash) che vado a riassumere di seguito:

Su Os X da Terminale:

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


Su Windows da Console:

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%.androiddebug.keystore | openssl sha1 -binary | openssl base64


L'esecuzione del codice di cui sopra, rilascia una stringa di 28 caratteri valida per l'ottenimento di una hash key a fini di test/debug, essa dovrà essere inserita nell'apposito campo di testo presente nelle impostazioni della pagina relativa al proprio account sviluppatore ed è univoca per essere utilizzata con la macchina che l'ha generata. E' possibile generare più stringhe a seconda del numero di macchine di test.
Per l'utilizzo di una stringa per la versione non di sviluppo ma di rilascio è sufficiente seguire i passaggi succesivi sempre presenti nella guida ufficiale presente nel link precedentemente riportato.

Una volta lanciato il comando vi verrà chiesto di Immettere la password del keystore, sarà sufficiente inserirla e premere Invio per veder comparire la stringa di 28 caratteri di nostro interesse.

Nel caso in cui permanga l'errore "Invalid key hash. The key hash … does not match any stored key hashes. Configure your app key hashes at  http: //developers.facebook.com/apps/..." significa che effettivamente quella chiave utilizzata non è valida e per risolvere il problema è necessario ottenere la chiave direttamente dall'applicazione inserendo nel codice lo script per ottenerla, inserire quindi subito dopo l'inizializzazione dell'SDK di Facebook la seguente porzione di codice sostituendo a "nome_del_package" il vostro effettivo nome del package:

try {
	PackageInfo info = getPackageManager().getPackageInfo(“nome_del_package”, 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) {

}


Sarà necessario importare le opportune dichiarazione e quando è la volta di quelle relative a "Signature" ci sarà una scelta multipla e quella di nostro interessa è la seguente:

import android.content.pm.Signature;


Non resta altro che eseguire il build ed il debug dell'applicazione e filtrare il Logcat con la chiave KeyHash per poter recuperare la stringa di 28 caratteri da inserire nell'apposito campo della pagina dell'app sotto il proprio account degli sviluppatori di Facebook, e sarà quindi possibile verificare come magicamente la comunicazione tra app e Facebook verrà stabilita.


Tags

Autore

Michele Pisani

Michele Pisani

Ho uno spiccato orientamento al problem-solving, se è troppo facile non mi diverto :)
Credo nella volontà e nel cambiamento perchè hanno fatto della mia passione il mio pane quotidiano.
Se devo descrivermi con una sola parola direi... "Concretezza", la mia stretta di mano è una garanzia.

5 Commenti

  1. Riccardo Saturday, December 5, 2015 alle ore 19:03

    Grazie mille il tuo articolo mi e' stato utilissimo, grazie mille..

    Rispondi a questo commento
  2. Nicolò Sunday, June 4, 2017 alle ore 16:59

    La tua guida è inutile quanto la guida sviluppatori Facebook dato che da terminale se viene digitato quella stringa riconosce keytool o openssl come comandi non riconosciuti. Di almeno dove l'utente si deve spostare per avviare questo comando e farlo riconoscere. INUTILE GUIDA.

    Rispondi a questo commento
    • Michele PisaniAutore Monday, June 5, 2017 alle ore 01:20

      Ciao Nicolò,
      mi spiace per la tua frustrazione ma mi spiace ancor di più, oltre leggere un messaggio di bassa educazione e rispetto, il fatto che non metti minimamente in discussione una tua eventuale concausa al problema, perché se ricevi quel messaggio di errore... proprio di questo si tratta...

      Come puoi leggere nella "inutile" guida ho espressamente indicato la banalità dell'operazione ponendo che l'utente abbia già installato l'SDK di Android.
      Questo lo dico perché se l'SDK è installato correttamente e le variabili di ambiente sono state configurate a dovere non hai bisogno di conoscere il percorso "dove l'utente si deve spostare per avviare questo comando e farlo riconoscere" in quanto da qualsiasi posizione il comando verrà lanciato, nel terminale, verrà riconosciuto e funzionerà (senza bisogno di accedere al path dove hai installato i tools dell'SKD).

      Ti consiglio pertanto di rivedere l'installazione del tuo SDK e riprovare nonché la prossima volta di essere un po' più riflessivo nel rispondere dato che se c'è una guida ufficiale del produttore (Facebook), così come una guida agevolata e collaudata (la presente), senza contare le migliaia se non milioni di app che integrano Facebook, probabilmente a sbagliare non sono tutti ma è qualcosa generato da noi stessi.

      Rispondi a questo commento
  3. Luca Murra Friday, January 5, 2018 alle ore 11:05

    Piccolo consiglio: per ottenere il nome del package da Android si può utilizzare il metodo getPackageName() da Activity, potresti metterlo al posto di "nome_del_package" così puoi generalizzare...

    Rispondi a questo commento
    • Michele PisaniAutore Sunday, January 7, 2018 alle ore 01:47

      Ciao Luca Murra,
      grazie del consiglio! Non potendo effettuare un test in questo momento sul codice oggetto di questo articolo ho inserito un link di tipo ancora nel testo al termine "nome del package" che rimanda al tuo commento così da renderlo di riferimento per l'informazione fornita.
      Di nuovo grazie e un saluto!

      Rispondi a questo commento

Scrivi un Commento

Il tuo indirizzo email non sarà pubblicato.
I campi contrassegnati da un * sono obbligatori

Articoli e Argomenti correlati

Il Canale YouTube in ITALIANO

1 VIDEO GRATIS ogni 2 settimane! ISCRIVITI!

Entra a far parte della community su Facebook

Categorie popolari

Iscriviti alla mia newsletter

La tua e-mail con me sarà al sicuro.
Non fornirò mai le tue informazioni a nessuno!

Ultimi commenti

Michele Pisani

Hai verificato se succede per tutte le pagine da un certo periodo di tempo in poi o solo su alcune?

Tecnowiz

Sono amministratore di un blog pure io... Intanto ti faccio i complimenti per questo articolo. …

Michele Pisani

Ciao Antonio, grazie per la fiducia :) In caso di più fogli è necessario inserire il codice del …

Antonio

Ciao Michele, ho acquistato il tuo libro che unitamente ai tuoi video sta diventando il mio corso …