2016-12-22 12 views
0

내 앱에서 Facebook 로그인을 구현하려고합니다. 사용자가 이미 로그인했는지 여부를 확인하기 위해 스플래시 후 IntroLogin 활동이 있습니다. 사용자가 이미 로그인 한 경우 MainActivity를 곧바로로드합니다. 그렇지 않으면 사용자에게 로그인을 요청합니다.Facebook SDK를 사용하여 로그인 할 수 없습니다.

사용자가 로그인했는지 여부를 확인하는 내 방법은 Android 6 이상에서 잘 작동합니다. 그러나 Android Lollipop에서는 사용자 로그인 후 (사용자가 팝업을 통해 정보를 사용하도록 앱을 제공함) 앱이 종료됩니다. 로그에 FC 또는 메시지가 없습니다. 그냥 닫힙니다. 사용자가 앱을 다시 시작한 경우에도 다시 로그인하라는 메시지가 표시됩니다.

내 IntroLogin 활동 :

UPDATE
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_intro_login); 

    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    loginButton = (Button) findViewById(R.id.login_button); 

    FacebookSdk.sdkInitialize(getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 

    AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
    if(accessToken != null){ 
     finish(); 
    } 
    else{ 
     loginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       PopupLogin(); 
      } 
     }); 
    } 
} 

public void PopupLogin() { 
    // Set permissions 
    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile")); 
    LoginManager.getInstance().setLoginBehavior(LoginBehavior.WEB_VIEW_ONLY).registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Log.i(TAG, "onSuccess: " + loginResult); 
      startActivity(new Intent(IntroLogin.this, MainActivity.class)); 
      finish(); 
     } 

     @Override 
     public void onCancel() { 
      Log.d("MyApp", "Login canceled"); 
      Snackbar snackbar = Snackbar.make(loginButton, "Login process canceled", Snackbar.LENGTH_INDEFINITE); 
      snackbar.getView().setBackgroundColor(ContextCompat.getColor(IntroLogin.this, R.color.colorPrimaryDark)); 
      snackbar.setActionTextColor(ContextCompat.getColor(IntroLogin.this, R.color.pure_white)); 
      snackbar.setAction(R.string.retry_login, new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        loginButton.performClick(); 
       } 
      }); 
      snackbar.show(); 
     } 

     @Override 
     public void onError(FacebookException error) { 
      Log.d("Myapp", error.toString()); 
      Toast.makeText(IntroLogin.this, error.getMessage(), Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

: 어쩌면 이유는 내가보고 아니라고 나는 원인이 아니라 해결책을 발견

, 나는 OnActivityResult 생각이 롤리팝에서 호출 점점되지 않으며, 모든 로그.

답변

0

당신이 단지 super.oncreate을 호출 한 후()

그리고이 또한 finish()를 호출 facebooksdk 때 사용자가 이미 활동을 닫습니다 페이스 북에 로그인 할 때 의미 accessToken != null ...

변경을 초기화한다 onCreate() 메서드 코드는 다음으로 이동합니다.

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     setContentView(R.layout.activity_intro_login); 
     callbackManager = CallbackManager.Factory.create(); 
     sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

     loginButton = (Button) findViewById(R.id.login_button); 
     updateWithToken(AccessToken.getCurrentAccessToken()); 
     accessTokenTracker = new AccessTokenTracker() { 
      @Override 
      protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) { 
       updateWithToken(newToken); 
      } 
     }; 
     accessTokenTracker.startTracking(); 
    } 

private void updateWithToken(AccessToken currentAccessToken) { 

     if (currentAccessToken != null) { 
      Log.d("FB", "User Logged IN."); 
      //programetically logout user or do your on success 
      LoginManager.getInstance().logOut(); 
     } else { 
      Log.d("FB", "User Logged Out."); 
      loginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       PopupLogin(); 
      } 
     }); 
     } 
    } 
+0

내 응용 프로그램 클래스에서 Facebook SDK를 초기화 중이므로 문제가되지 않습니다. 어쨌든, 당신의 대답은 롤리팝으로 끝났습니다. 나는 심지어 OnSuccess에 토스트/로그를 보여 주려고했는데, 화면이나 로그에 아무 것도 표시하지 않습니다. 나는 꽤 우둔한데 왜 그런 일이 일어나는가! –

+0

당신의 facebook sdk 버전은 무엇입니까? – rafsanahmad007

+0

4.18 버전을 사용하고 있습니다. –

0

원인을 발견했습니다. OnActivityResult가 호출하지 않는 이유는 loginActivity에 android:launchMode="singleTop"을 추가했기 때문입니다.

관련 문제