2013-07-25 17 views
10

Ho creato un semplice login facebook. Per Android 2.3.6 tutto funziona come dovrebbe, l'utente riceve una finestra di dialogo di accesso, inserisce i dati e l'app continua. Ho pensato che fosse colpa delle versioni di Android ma risulta che il login non funziona quando c'è un'applicazione di Facebook installata sul telefono!Accesso facebook Android non funzionante con l'app Facebook installata

testato questo su: Galaxy Ace 2.3.6 HTC Desire 4.1.2 Galaxy Note 4.1.2 emulatore di Android 4.1.2

Anche i campioni di Facebook non funzionano!

Ogni volta che l'applicazione è in esecuzione -

Sembra che la sessione non è aperta, ma perché? Seguito questa guida - https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

Codice:

Session.openActiveSession(this, true, new Session.StatusCallback() { 

     @Override 
     public void call(final Session session, SessionState state, Exception exception) { 

      if (session.isOpened()) { 

       Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

        @Override 
        public void onCompleted(GraphUser user, Response response) { 
         if (user != null) { 
          Log.d("Access_token", session.getAccessToken()); 
         } 
        } 
       }); 
      } else { 
       Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); 
      } 
     } 
    }); 
+0

Perché è 'sessione session' finale? – BLaZuRE

+2

Così potrei ottenere, ad esempio, un token di accesso utente all'interno del metodo onComplete! – Karlis

+0

Ehi hai disattivato la modalità Sand Box nella scheda delle informazioni di base della tua app sulla pagina degli sviluppatori di Facebook? –

risposta

5

Partenza il fondo del punto 4: https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

Se non è stato digitato la vostra applicazione hash chiave correttamente, Facebook login tramite il popup WebView (se l'applicazione non è installata) continuerà a funzionare, ma il login tramite il l'app nativa di Facebook non lo farà.

si dovrebbe vedere questa eccezione in LogCat:

com.facebook.http.protocol.ApiException: remote_app_id does not match stored id 

The Facebook SDK stampa il suo eccezioni in modo da controllare c'è in ogni caso se ci sono altri problemi.

+0

Provato questo. Ottengo la finestra per impostare le permissioni, ma non compare nulla in LogCat e l'utente non ha effettuato il login – Karlis

+1

In realtà questo era il problema. Ma Eclipse LogCat non ha mostrato errori, ma quando ho eseguito adb logcat nel terminale ha mostrato l'errore e si scopre che ho copiato ha senza un carattere! – Karlis

+0

mi ha salvato la vita grazie! –

-1

enter image description here

Disabilita modalità sandbox ... Questo permetterà la vostra applicazione per funzionare su tutti i dispositivi. Prova questa soluzione

+1

Ho disabilitato la modalità sandbox! – Karlis

+0

La modalità sandbox non limita i dispositivi che possono eseguire l'applicazione, limita solo ** chi ** può usarlo. –

2

Sembra che non ho potuto ottenere i dati se avessi sessione di Facebook attiva (dall'applicazione Facebook).

Quindi, prima di aprire la sessione, chiedo l'accesso forzato, anche se l'utente ha aperto la sessione di Facebook dall'applicazione Facebook.

openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); 

Quindi ora tutto funziona ma l'utente deve inserire i dati manualmente. Non è l'ideale, ma funziona.

Anche gli esempi di Facebook non funzionavano con l'app Facebook aperta.

Se qualcuno ha una soluzione migliore, sentitevi liberi di suggerire.

0

Se tasto cancelletto non viene correttamente generata allora si può affrontare i problemi come

viene visualizzata una finestra nativa Entrata ma dopo aver accettato i permessi popup va di e non succede nulla nel registro gatto

Ma Login e Azione sarà funziona bene se l'app nativa sul dispositivo è disabilitata (la finestra di login si apre in visualizzazione web in questo caso e la chiave hash corretta non è necessaria per questo)

Ero di fronte allo stesso problema e ho risolto questo ottenendo la chiave hash utilizzando questo codice .Tasto cancelletto era diverso da quello generato usando OpenSSL e keytool

e dopo l'aggiornamento questa chiave hash in app Facebook tutto funziona bene

//================================== To Get Facebook Hash key Programmatically =========================// 
    PackageInfo info; 

    try { 
      info = activity.getPackageManager().getPackageInfo("com.checkmyplanner", 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()); 
     } 

Basta cambiare il nome del pacchetto e ottenere una corretta chiave di hash

3

Farti hash chiave utilizzando questa funzione per entrambi (debug e apk rilascio) e metterlo nella vostra applicazione in developer.facebook.com/apps

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 aiuti molto .. Spero che questo vi aiuterà anche voi ..

6

Sto Scrivendo questa risposta per coloro che utilizzano Facebook SDK 4.X

è possibile aprire portale di login di Facebook in uno dei due modi:

  1. se si dispone di un dispositivo Android con Android 1.9.X e Facebook App è installata nel dispositivo chiamato Native Login Metodo qui, non è necessario utilizzare facebook WebView

  2. se non avete installato Facebook App nel tuo dispositivo Android, allora è bene usare WebView

quindi per questo Facebook fornire 3 Constants

  1. NATIVE_ONLY (utilizzato quando si vuole aprire solo in Facebook App)
  2. WEB_ONLY (utilizzato quando si vuole aprire solo WebView)
  3. NATIVE_WITH_FALLBACK (consigliato Facebook rilevare e opne webView se l'applicazione non è installata)

Controllare il collegamento sotto per i dettagli https://developers.facebook.com/docs/reference/android/current/class/LoginButton/ https://developers.facebook.com/docs/facebook-login/android/v2.2#troubleshooting

 LoginButton.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK); 
    LoginButton.setLoginBehavior(LoginBehavior.NATIVE_ONLY); 
    LoginButton.setLoginBehavior(LoginBehavior.WEB_ONLY); 
Problemi correlati