2011-03-31 4 views
0

나는 facebook iframe 응용 프로그램을 가지고 있습니다. 그래프 API를 사용하여 서버 측에서 페이스 북에 대한 요청을하고 있습니다. access_token이 만료되지 않도록 오프라인 액세스 권한이 있습니다.사용자가 자신의 access_token 및 그래프 API를 사용하여 페이스 북에 로그인했는지 확인하는 방법

현재 사용자가 페이스 북에 로그인했는지 알고 싶습니다. 페이스 북을 로그 아웃 할 때 내 응용 프로그램에서 로그 아웃 할 수 있습니다. 자바 스크립트 SDK를 사용하고 싶지 않습니다.

사용자 테이블의 online_presence 필드를 사용해 보았지만 항상 null을 반환합니다. 내가 할 수있는 방법이 있습니까?

더 좋은 방법이 있습니까?

+1

로그 아웃은 클라이언트 측 이벤트이기 때문에 jsdk의 이벤트를 구독하는 것이 유일한 방법이라고 생각합니다. 나는 서버 측 대안이 있다고 생각하지 않는다. FB.Event.subscribe ('auth.sessionChange', function (response) –

+0

고마워요 - 세션이 아직 남아 있기 전에 페이지를 새로 고침하고 초기화를 호출 한 후에 만 ​​작동하는 것 같습니다 – Daniel

답변

0

제 신청서에는 똑같은 것이 필요했습니다. 지금까지 내가 본 것처럼 checkToken() 메소드와 같이 사용자가 로그인했는지 여부를 확인하는 공식적인 방법은 없습니다. 내가하는 일은 그의 프로필을 빨리 훑어보고 응답을 받는지 확인하는 것입니다. 사용자가 Facebook에서 로그 아웃하면 offline_access 토큰도 무효화됩니다.

+0

아니요 로그 아웃해도 offline_access 토큰 그 점 : –

+0

나를 위해 오프라인! = 로그 아웃. offline_access가 "server_access"와 동의어 인 것으로 가정하고있었습니다. 예를 들어 JS SDK와 같이 사용자 벽에 게시 할 필요가 없습니다. 그 문제를 해결해 주셔서 감사합니다. – Chris

+0

offline_access는 주어진 시간에이 토큰으로 인증 할 수 있음을 의미합니다. 사용자는 토큰을 무효화하려면 권한을 취소해야합니다. –

0

가 늦게 회신,하지만 지금 버전에서 Facebook SDK4.25.0는 방법이있다 :

public void retrieveLoginStatus(Context context, 
           LoginStatusCallback responseCallback) 

상태 :

사용자의 로그인 상태를 검색합니다. 사용자가 Android 용 Facebook 앱에 동일한 기기에 로그인하고 그 사용자가 이전에 앱에 로그인 한 경우 앱에 대한 액세스가 토큰을 반환합니다. . 액세스 토큰이 다음 검색 한 경우 건배은 로그인 한 사용자를 말하는

을 을 표시됩니다 그리고처럼 사용할 수 있습니다 : 이것은 이미 here 대답

LoginManager.getInstance().retrieveLoginStatus(this, new LoginStatusCallback() 
{ 
    @Override 
    public void onCompleted(AccessToken accessToken) 
    { 
     GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() 
     { 
      @Override 
      public void onCompleted(JSONObject object, GraphResponse response) 
      { 
       Log.e(TAG, object.toString()); 
       Log.e(TAG, response.toString()); 

       try 
       { 
        userId = object.getString("id"); 
        profilePicture = new URL("https://graph.facebook.com/" + userId + "/picture?width=500&height=500"); 
        Log.d("PROFILE_URL", "url: " + profilePicture.toString()); 
        if (object.has("first_name")) 
        { 
         firstName = object.getString("first_name"); 
        } 
        if (object.has("last_name")) 
        { 
         lastName = object.getString("last_name"); 
        } 
        if (object.has("email")) 
        { 
         email = object.getString("email"); 
        } 
        if (object.has("birthday")) 
        { 
         birthday = object.getString("birthday"); 
        } 
        if (object.has("gender")) 
        { 
         gender = object.getString("gender"); 
        } 

        Intent main = new Intent(LoginActivity.this, MainActivity.class); 
        main.putExtra("name", firstName); 
        main.putExtra("surname", lastName); 
        main.putExtra("imageUrl", profilePicture.toString()); 
        startActivity(main); 
        finish(); 
       } 
       catch (JSONException e) 
       { 
        e.printStackTrace(); 
       } 
       catch (MalformedURLException e) 
       { 
        e.printStackTrace(); 
       } 

      } 
     }); 
     //Here we put the requested fields to be returned from the JSONObject 
     Bundle parameters = new Bundle(); 
     parameters.putString("fields", "id, first_name, last_name, email, birthday, gender"); 
     request.setParameters(parameters); 
     request.executeAsync(); 
    } 

    @Override 
    public void onFailure() 
    { 
     Toast.makeText(LoginActivity.this, "Could not log in.", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onError(Exception exception) 
    { 
     Toast.makeText(LoginActivity.this, "Could not log in.", Toast.LENGTH_SHORT).show(); 
    } 
}); 

.

관련 문제