2013-06-26 22 views
5

Kiedy korzystam z HTC Android, to działa bardzo dobrze. Jednak, gdy korzystam z interfejsu API Facebooka do logowania za pomocą Samsunga Android 4.2, wyświetlam komunikat "Toast", np. "Logowanie nie działa, skontaktuj się ze znacznikiem tej aplikacji i poproś o wydanie 1732910 na Facebooku"Facebook Login nie działa, gdy korzystam z Samsung Android 4.2

Proszę, pomóż mi to naprawić !

public class FacebookLogin { 
/* variable Facebook */ 
private static final String FACEBOOK_APPID = "578073962236765"; 
private FacebookConnector facebookConnector; 
private final Handler mFacebookHandler = new Handler(); 
ActivityBase activity; 
Request.GraphUserCallback userCallback; 
LoginService.OnSwimLogedInEvents swimLoginCallBack; 
LoginService loginService; 
Dialog changeDialog; 
LoadingDialog loadingDialog; 

public FacebookLogin(ActivityBase activity, Request.GraphUserCallback userCallback, LoginService.OnSwimLogedInEvents swimLoginCallBack) { 
    this.activity = activity; 
    this.loadingDialog = new LoadingDialog(); 
    this.userCallback = userCallback; 
    this.swimLoginCallBack = swimLoginCallBack; 
    this.loginService = new LoginService(activity); 
    this.facebookConnector = new FacebookConnector(FACEBOOK_APPID, 
      activity, activity, new String[]{ 
      "publish_stream", "email", "user_birthday", "read_stream", "offline_access"}); 
} 

public void login() { 
    Session.initializeStaticContext(activity); 
    if (facebookConnector.getFacebook().isSessionValid()) { 
     facebookConnector.getFacebook().getSession() 
       .closeAndClearTokenInformation(); 
    } 

    AuthListener listener = new AuthListener() { 
     @Override 
     public void onAuthSucceed() { 
      doLogin(); 
     } 

     @Override 
     public void onAuthFail(String error) { 
      //(new MessageAlert()).showDialog("Facebook authetication fail\r\nError:" + error, activity); 
     } 
    }; 
    SessionEvents.addAuthListener(listener); 

    facebookConnector.login(); 
} 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data); 
} 

private void doLogin() { 
    AsyncTaskBase<Void, Void, Void> t = new AsyncTaskBase<Void, Void, Void>(
      activity) { 
     @Override 
     protected Void doInBackground(Void... params) { 
      mFacebookHandler.post(facebookUserInfoRunner); 
      return super.doInBackground(params); 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      super.onPostExecute(aVoid); 
     } 
    }; 
    t.execute(); 
} 

final Runnable facebookUserInfoRunner = new Runnable() { 
    @Override 
    public void run() { 
     loadingDialog.showDialogLoading(activity); 
     Request.executeMeRequestAsync(facebookConnector.getFacebook() 
       .getSession(), new Request.GraphUserCallback() { 

      @Override 
      public void onCompleted(GraphUser user, Response response) { 
       SwimAccount currentAccount = ((SwimApp) activity.getApplication()).getCurrentAccount(); 
       currentAccount.setAvatarUrl("https://graph.facebook.com/" + user.getId() + "/picture"); 
       currentAccount.setIsLogin(true); 
       currentAccount.setFirstName(user.getFirstName()); 
       currentAccount.setLastName(user.getLastName()); 
       currentAccount.setStringId(user.getId()); 
       currentAccount.setAccountType("facebook"); 
       currentAccount.setEmail((String) response.getGraphObject().getProperty("email")); 
       currentAccount.setBirthdate(user.getBirthday()); 
       currentAccount.setGender((String) response.getGraphObject().getProperty("gender")); 
       if (userCallback != null) { 
        userCallback.onCompleted(user, response); 
       } 

       loginService.login(currentAccount.getEmail(), "", currentAccount.getAccountType(), currentAccount.getStringId(), swimLoginCallBack); 
       //changeDialog.dismiss(); 
      } 
     }); 
    } 
}; 

}

+0

samo tutaj proszę odpowiedzieć. –

+0

Jakieś rozwiązanie tego? Mam taki sam problem z Samsungem S4 z 4.2+. – Ron

+0

Upewnij się, że używasz najnowszej wersji programu facebook sdk. Możesz go pobrać z [tutaj] (https://developers.facebook.com/android/), a także przejść tam podstawowe tutoriale. –

Odpowiedz

2

znalazł rozwiązanie mojego problemu. Spróbuj usunąć android:noHistory="true" z działania logowania na Facebooku w swoim manifeście. To zakłóca przepływ uwierzytelniania sesji.

1

Wygląda na to, że ludzie na XDA mają ten sam problem.

Oni twierdzą, że można spróbować jednego z nich:

(1) opcję „Nie zachowuj działań” w Ustawienia> Opcje programistyczne. Jeśli jest włączony, to gdy aplikacja wywoła jakieś wyskakujące okienko, system zamyka aplikację, a następnie system uruchamia się ponownie ... i dostał twoją pętlę.

(2) Jeśli odinstalujesz aplikację Facebook, możesz zalogować się za pomocą aplikacji, a następnie ponownie zainstalować aplikację Facebook.

Nie jestem pewien, jak "oficjalne" są te odpowiedzi, ale pomyślałem, że warto dla ciebie strzelić.

Źródła: http://forum.xda-developers.com/showthread.php?p=43200939 i http://forum.xda-developers.com/showthread.php?t=2186035

+0

Wypróbowałem je i one nie pomogły. Napisałem swoje rozwiązanie (które naprawiło mój problem), ale nie jestem pewien, czy to będą problemy innych osób. – Ron

Powiązane problemy