2012-05-09 3 views
9

Sto costruendo un'app, che avrà supporto per Facebook. Ho scaricato le API di Facebook e il loro esempio chiamato "Hackbook" dai repository Git originali. Il problema è con il login: se l'app FB originale non è installata sul telefono, l'accesso passa attraverso la finestra di dialogo personalizzata e tutto funziona, ma se l'app FB è installata, l'Hackbook reindirizza automaticamente all'app FB originale e quindi non è successo nulla. È impossibile accedere. L'ho provato su cinque telefoni diversi e sempre lo stesso problema.L'accesso a Facebook API fallisce con l'app FB installata sul telefono

risposta

18

Ho avuto un problema simile. Nel mio caso, non avevo creato una chiave hash usando la mia chiave di firma. Ho appena creato la chiave hash creata utilizzando la chiave di firma predefinita debug.keystore.

Non appena ho creato una chiave hash utilizzando la mia chiave di firma rilascio app, questo problema è stato risolto. Se non lo hai già fatto, crea una nuova chiave hash usando la tua chiave di firma (per il caricamento sul mercato) e aggiungila al pannello di controllo di Facebook della tua app.

Spero che questo aiuti.

+0

Ho aggiunto la chiave hash nel pannello di controllo, ma il problema è ancora qui. Devo aggiungere la chiave hash anche a fb api da qualche parte? – virusss8

+2

@ virusss8: non è necessario aggiungere l'hashkey nella tua app. Segui questo passaggio e dimmi il risultato. Apri il file di classe Util nel tuo facebook-sdk e modifica il 'boooleano statico privato ENABLE_LOG = falso' in 'vero'. Ora tieni il telefono connesso al PC di sviluppo ed esegui l'app creata utilizzando l'apk firmato e accedi. Tieni aperta una finestra DDMS e controlla se genera un errore. –

+0

D/Facebook-autorize (25124): Login fallito: invalid_key: mancata corrispondenza della chiave Android. La chiave "********* real * key ************" non corrisponde alle chiavi consentite specificate nelle impostazioni dell'applicazione. Controlla le impostazioni dell'applicazione all'indirizzo http://www.facebook.com/developers ma non ho mai impostato quella chiave ovunque. Che chiave è ??? – virusss8

4

ho faticato per due giorni & ottenuto la soluzione alla fine, questo è il SBAGLIATO modo per ottenere il tasto cancelletto -

keytool -exportcert -alias *<your _alias_name>* -keystore *<key_store_path>* | [openssl_bin_directory]\openssl sha1 -binary | [openssl_bin_directory]\openssl base64 

Il modo giusto è digitare questi 3 linee, una a un tempo in cmd. Dopo la prima riga, ti verrà chiesto di inserire la password del keystore.

keytool -exportcert -alias *<your _alias_name>* -keystore *<key_store_path>* > [openssl_bin_directory]\debug.txt 
[openssl_bin_directory]\openssl sha1 -binary [openssl_bin_directory]\debug.txt > [openssl_bin_directory]\debug_sha.txt 
[openssl_bin_directory]\openssl base64 -in [openssl_bin_directory]\debug_sha.txt > [openssl_bin_directory]\debug_base64.txt 

Se volete conoscere i dettagli, il DESTRA modo è descritto qui -

http://facebook.stackoverflow.com/questions/13281913/app-is-misconfigured-for-facebook-login-with-release-key-hash

o qui

Facebook Android Generate Key Hash

+1

Perché dovresti pubblicare il testo sbagliato e non il giusto? L'ho quasi usato lol ma grazie per il link a quello giusto – Guardanis

+2

@Cruceo, ho modificato il post, puoi dare +1 se ti piace. – Khobaib

+0

GRAZIE, hai appena trascorso le ultime 3 ore cercando di capirlo. –

1

farti tasto cancelletto di utilizzare questa funzione per entrambi (debug e apk di rilascio) e inseriscilo nella tua app in developer.facebook.com/a pps

private void calculateHashKey(String yourPackageName) { 
    try { 
     PackageInfo info = getPackageManager().getPackageInfo(
       yourPackageName, 
       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) { 
     e.printStackTrace(); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
} 

questo mi aiuta molto .. Spero che questo vi aiuterà anche voi ..

1

ho risolto questo problema. Dopo aver ottenuto l'hash Key usando keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64 ho effettuato l'accesso per la prima volta in modalità di rilascio con successo ... Quindi la seconda volta ho ricevuto l'errore comune La chiave "*********real*key************" non corrisponde alle chiavi consentite specificate nelle impostazioni dell'applicazione.

Basta usare il "*********real*key************" che Facebook fornisce nel messaggio di errore che ho effettuato l'accesso con successo ora in modalità di rilascio. Quindi assicurati di inserire questa chiave per utilizzare la stessa chiave. Le LETTERE I, small(L) i.e (l) ti metteranno nei guai. Ho fatto due chiavi, nella prima chiave ho usato small(L) i.e (l) e nella seconda chiave che ho usato I. e ho inserito queste chiavi nell'app per sviluppatori.
Sta funzionando ...

+0

Questo era il problema esatto nel mio caso ... l'unica soluzione che funzionava! e la parte sulla piccola "L" è corretta, e anche Big "I" (che potrebbe sembrare una piccola "L" in alcuni tipi di carattere .. –

0

Nel mio caso il problema era che l'accesso utente viene annullato quando l'app di Facebook è installata sul dispositivo anche dopo aver generato i tasti di destra.

Ho aggiunto la seguente riga prima di accedere e funziona benissimo.

LoginManager.getInstance().logOut();