2013-07-25 19 views
10

Ustawiłem prosty login na Facebooku. W systemie Android 2.3.6 wszystko działa tak jak powinno, użytkownik uzyskuje szybkie okno logowania, wchodzi dane i aplikacja jest aktywna. Myślałem, że to błąd Androida, ale okazuje się, że logowanie nie działa, gdy w telefonie zainstalowana jest aplikacja facebook!Logowanie do Facebooka za pomocą Facebooka nie działa z zainstalowaną aplikacją Facebook

przetestowane na: Galaxy Ace 2.3.6 HTC Desire 4.1.2 Galaxy Note 4.1.2 systemem Android emulatora 4.1.2

Nawet próbki facebook nie działa!

każdym razem, gdy aplikacja jest wykonywany -

Wydaje się, że sesja nie jest otwarty, ale dlaczego? Po tej instrukcji - https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

Kod:

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

Dlaczego 'Sesja session' końcowy? – BLaZuRE

+2

Po to, abym mógł uzyskać na przykład token dostępu użytkownika wewnątrz metody onComplete! – Karlis

+0

Hej, czy wyłączyłeś tryb piaskownicy na podstawowej karcie informacyjnej aplikacji na stronie programisty na Facebooku? –

Odpowiedz

5

Zapoznaj się z dna Krok 4: https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

Jeśli nie weszły swoją aplikację hash klucza prawidłowo, Facebook Zaloguj się za pomocą wyskakującego okienka WebView (jeżeli aplikacja nie jest zainstalowana) będzie nadal działać, ale logowanie za pośrednictwem natywna aplikacja Facebook nie będzie.

Powinieneś zobaczyć ten wyjątek w LogCat:

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

Facebook SDK drukuje wyjątki więc sprawdzić, czy mimo to istnieją inne problemy.

+0

Próbowałem tego. Dostaję okno do ustawiania uprawnień, ale nic nie pokazuje się w LogCat i użytkownik nie jest zalogowany – Karlis

+1

W rzeczywistości to był problem. Ale Eclipse LogCat nie pokazywał żadnych błędów, ale kiedy uruchomiłem adb logcat w terminalu, pokazał błąd i okazało się, że skopiowałem go bez jednej postaci! – Karlis

+0

uratowało mi życie dzięki.! –

-1

enter image description here

Wyłącz tryb piaskownicy ... Pozwoli to aplikacja do pracy na wszystkich urządzeniach. Wypróbuj to rozwiązanie

+1

Mam wyłączony tryb piaskownicy! – Karlis

+0

Tryb piaskownicy nie ogranicza tego, które urządzenia mogą uruchamiać aplikację, ogranicza tylko ** kto ** może z niego korzystać. –

2

Wygląda na to, że nie mogłem uzyskać danych, gdybym miał aktywną sesję na Facebooku (z aplikacji Facebook).

Więc zanim otworzę sesję, proszę o wymuszenie logowania, nawet jeśli użytkownik ma otwartą sesję na Facebooku z aplikacji Facebook.

openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); 

Teraz wszystko działa, ale użytkownik musi wprowadzić dane ręcznie. To nie jest idealne, ale działa.

Nawet próbki z Facebooka nie działały dla mnie z otwartą aplikacją Facebook.

Jeśli ktoś ma lepsze rozwiązanie, zachęcamy do zasugerowania.

0

Jeśli klawisz krzyżyka nie jest prawidłowo generowany wtedy można napotkać problemy jak

jest wyświetlany Pochodzący Logowanie Dialog ale po zaakceptowaniu uprawnienia popup idzie i nic się nie dzieje w dzienniku kota

Ale Login i akcji będzie działa dobrze, jeśli natywna aplikacja na urządzeniu jest wyłączona (okno dialogowe logowania otwiera się w widoku sieciowym w tym przypadku, a odpowiedni klawisz skrótu nie jest wymagany)

Wystąpił ten sam problem i rozwiązałem ten problem, uzyskując klucz hash, używając tego kodu .klawisz krzyżyka różnił się od jednego generowane przy użyciu OpenSSL i keytool

i po aktualizacji tego klawisza skrótu w Facebooku aplikacji wszystko działa dobrze

//================================== 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()); 
     } 

Wystarczy zmienić nazwę pakietu i uzyskania odpowiedniego skrótu kluczem

3

Get ty hash key użyciem tej funkcji dla obu (debug i release apk) i umieścić go w swojej aplikacji w 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(); 
    } 
} 

to mi pomoże dużo .. Mam nadzieję, że to pomoże zbyt ..

6

jestem pisanie to odpowiedź dla tych, którzy są przy użyciu Facebook SDK 4.X

można otworzyć portal logowania facebook w jeden z dwóch sposobów:

  1. jeśli masz urządzenie z Androidem z Android 1.9.X i Facebook App jest zainstalowana w urządzeniu zwanym Native Login Metoda tutaj, nie trzeba korzystać z Facebookiem WebView

  2. jeśli nie masz zainstalowanego Facebook App w urządzeniu Android wtedy dobrze jest używać WebView

więc w tym Facebook dostarczyć 3 Constants

  1. NATIVE_ONLY (używane, gdy chcemy otworzyć tylko w Facebooku APP)
  2. WEB_ONLY (używane, gdy chcemy otworzyć tylko WebView)
  3. NATIVE_WITH_FALLBACK (Zalecane Facebook wykryć i opne webView jeśli aplikacja nie jest zainstalowana)

Sprawdź poniżej linku do szczegółów 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); 
Powiązane problemy