2013-08-12 2 views
0

UI에서 단추를 클릭하면 함수를 호출해야합니다 (fbLogin()).이 함수는 닫힌 경우 세션을 열고 사용자를 인증합니다.openActiveSession()을 호출 한 후에도 Android 앱에서 Facebook 승인 액세스 토큰을받지 못하고 있습니까?

public void fbLogin(View button) { 
    Log.e(getClass().getName(), "0"); 
    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 
    Session session = Session.getActiveSession(); 
    if (session == null) { 
     Log.e(getClass().getName(), "1"); 
     if (savedInstanceState != null) { 
      Log.e(getClass().getName(), "2"); 
      session = Session.restoreSession(this, null, statusCallback, 
        savedInstanceState); 
     } 
     if (session == null) { 
      Log.e(getClass().getName(), "3"); 
      session = new Session(this); 
     } 
     Log.e(getClass().getName(), "4"); 
     Session.setActiveSession(session); 
     if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
      Log.e(getClass().getName(), "5"); 
      session.openForRead(new Session.OpenRequest(this) 
        .setCallback(statusCallback)); 
     } 
    } 
    Log.e(getClass().getName(), "6"); 
    updateView(); 
} 

updateView() :

private void updateView() { 
    final Session session = Session.getActiveSession(); 
    if (session.isOpened()) { 
     Log.e(getClass().getName(), "7"); 

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

        // callback after Graph API response with user object 
        @Override 
        public void onCompleted(GraphUser user, 
          Response response) { 
         Log.e(getClass().getName(), "8"); 
         if (user != null) { 
          String str = user.getName(); 
          Intent intent = new Intent(
            getApplicationContext(), LoggedIn.class); 
          Log.e(getClass().getName(), user.getName()); 
          intent.putExtra("UserName", str); 
          startActivity(intent); 
         } 
        } 
       }); 

    } 

    else { 
     Log.e(getClass().getName(), "9"); 
     Session.openActiveSession(this, true, statusCallback); 
        if(session.isOpened()) Log.e(getClass().getName(), "15"); 
     Log.e(getClass().getName(), "AT : "+ session.getAccessToken()); 
     Request.executeMeRequestAsync(session, 
       new Request.GraphUserCallback() { 

        // callback after Graph API response with user object 
        @Override 
        public void onCompleted(GraphUser user, 
          Response response) { 
         Log.e(getClass().getName(), "10"); 

         if(user==null) Log.e(getClass().getName(), "11"); 
         if (user != null) { 
          Log.e(getClass().getName(), "12"); 
          String str = user.getName(); 
          Intent intent = new Intent(
            getApplicationContext(), LoggedIn.class); 
          Log.e(getClass().getName(), user.getName()); 
          intent.putExtra("UserName", str); 
          startActivity(intent); 
         } 
        } 
       }); 

    } 

} 

내 SessionStatusCallback 클래스 :

private class SessionStatusCallback implements Session.StatusCallback { 
    @Override 
    public void call(Session session, SessionState state, 
      Exception exception) { 
     Log.e(getClass().getName(), "13"); 

     // updateView(); 
    } 
} 

그러나 나는 그것이 토큰을 가져 오는 것처럼 (활동이로드 계속해서 로그인 버튼을 클릭 할 때), 세션이 열리지 않음 (Logger가 LogCat에 15을 기록하지 않음)

LogCat 출력 :

08-12 16:11:35.836: E/com.example.usemeone.UsemeOne(1725): 0 
08-12 16:11:35.846: E/com.example.usemeone.UsemeOne(1725): 1 
08-12 16:11:35.846: E/com.example.usemeone.UsemeOne(1725): 3 
08-12 16:11:35.886: E/com.example.usemeone.UsemeOne(1725): 4 
08-12 16:11:35.896: E/com.example.usemeone.UsemeOne(1725): 6 
08-12 16:11:35.896: E/com.example.usemeone.UsemeOne(1725): 9 
08-12 16:11:36.046: E/com.example.usemeone.UsemeOne(1725): AT : 
08-12 16:11:36.366: E/com.example.usemeone.UsemeOne$SessionStatusCallback(1725): 13 
08-12 16:11:37.196: E/com.example.usemeone.UsemeOne$2(1725): 10 
08-12 16:11:37.196: E/com.example.usemeone.UsemeOne$2(1725): 11 
+0

샘플 Android-facebook 앱을 사용하셨습니까? – MiStr

+0

참조 : https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/ 또는 https://github.com/fbsamples – MiStr

+0

음 샘플 (SessionLoginSample)을 사용하여 만들었습니다. 약간의 수정과 모든 전제 조건은 페이스 북 개발자 페이지에서 이루어집니다. – Akshay

답변

0

SessiononActivityResult()을 구현하고 있습니까? 그렇지 않으면 인증을 완료하지 않습니다.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == Session.DEFAULT_AUTHORIZE_ACTIVITY_CODE) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (Session.getActiveSession() != null) 
      Session.getActiveSession().onActivityResult(this, requestCode, 
        resultCode, data); 

     Session currentSession = Session.getActiveSession(); 
     if (currentSession == null || currentSession.getState().isClosed()) { 
      Session session = new Session.Builder(this).build(); 
      Session.setActiveSession(session); 
      currentSession = session; 
     } 

     if (currentSession.isOpened()) { 
      Session.openActiveSession(this, true, statusCallback); 
     } 
    } 
} 
+0

아니, 변경하지 마십시오. LogCat에서도 동일한 결과가 나타납니다. 어쨌든 onActivityResult가 해당 활동을 종료 할 때만 호출되지만 결코 그 활동을 종료하지 않으므로 결과가 어떻게 변경 될까요? – Akshay

+0

아, Eclipse에서 내 앱 이름을 변경하고 Facebook 앱 등록에서 수정하지 않았습니다. – Akshay