0

현재 Android에 대한 Facebook SDK로 작업하고 있습니다. 이 공식 가이드 (Facebook Login for Android)에서 설명한 것처럼 내 앱에 Facebook 로그인을 프로그래밍했습니다. 이것은 잘 작동합니다. 이 방법의 아이디어는 메인 Activity과 두 개의 Fragment (로그인 및 시작 화면)입니다. 이 Fragment 중 하나는 사용자가 Facebook에 성공적으로 연결된 경우에 따라 숨겨집니다.페이스 북의 로그인 : 로그인 후 활동 표시

내 환영 화면은 Navigation Drawer 인 메인 Activity (사용자가 선택하는 메뉴 항목에 따라 Fragment을 대체 할 수 있음)입니다. 사용자가 Facebook에 연결되어 있지 않으면 로그인 화면이 표시되어야합니다. 로그인 후 사용자가 앱을 다시 시작한 경우에도 주 Activity이 표시되어야합니다 (또는 Navigation DrawerFragment 중 하나임).

내가 할 수있는 일 : 위에서 설명한대로 Fragment 튜토리얼 예제를 구현하고 새로운 활동을 시작하는 Button을 제공합니다.하지만 앱을 시작할 때 항상이 Button을 클릭하고 싶지 않습니다!

자습서가 있습니까? Activity 주를보기 전에 표시되는 환영 메시지 Fragment을 구현하지 않고 자습서를 제공하거나 아이디어를 얻는 방법이 있습니까?

답변

0

좋아, 나는 해결책을 찾았습니다.

이 코드는 MainActivity으로 전달되고 이후에 LoginActivity이 다시 스택에서 제거됩니다 (뒤로 버튼은 앱을 종료 함).

아무리 그래도 문제가 있습니다. 앱을 종료하면 Facebook 계정에서 앱을 삭제하고 다시 설치하면 MainActivity (으)로 다시 전달되므로 다시 로그인하지 않아도됩니다. 앱을 닫고 다시 열면 LoginActivity이 올바르게 표시됩니다.

이 시나리오를 디버깅하면 모든 것이 완벽하게 작동합니다. 이 문제를 어떻게 피할 수 있습니까?

public class LoginActivity extends Activity { 

    private boolean isResumed = false; 
    private UiLifecycleHelper uiHelper; 

    private Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 
      onSessionStateChange(session, state, exception); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     uiHelper = new UiLifecycleHelper(this, callback); 
     uiHelper.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_login); 

    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     isResumed = true; 
     Session session = Session.getActiveSession(); 
     if (session != null && (session.isOpened() || session.isClosed())) { 
      onSessionStateChange(session, session.getState(), null); 
     } 
     uiHelper.onResume(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     uiHelper.onPause(); 
     isResumed = false; 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     uiHelper.onActivityResult(requestCode, resultCode, data); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     uiHelper.onDestroy(); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     uiHelper.onSaveInstanceState(outState); 
    } 

    private void onSessionStateChange(Session session, SessionState state, 
      Exception exception) { 
     if (isResumed) { 
      if (session != null && session.isOpened()) { 
       Intent intent = new Intent(LoginActivity.this, 
         MainActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
         | Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(intent); 
       finish(); 
      } 
     } 
    } 

} 
관련 문제