2015-01-02 1 views
1

Android 앱에서 Facebook 및 Parse SDK를 사용하고 있습니다. 나는 Session.StatusCallback에서 OPENED인지 여부에 따라 로그인 단편주 메뉴 단편에 대한 조각 간을 변경하여 Facebook 로그인 및 인증을위한 this 자습서를 따랐습니다. 그리고이 응용 프로그램은 Parse와 통합되기 전에 완벽하게 작동합니다.Android - ParseFacebookUtils.logIn을 사용할 때 Facebook 세션이 닫혔습니다.

이제 문제가 발생합니다. 메인 메뉴 단편의 onResume() 메소드에서 다음 코드를 추가했습니다. 조각이 재개되고, 페이스 북 세션이 열릴 때 나는 나중에 ParseUserputget 데이터를 사용할 수 있도록

final Session session = Session.getActiveSession(); 

if(session != null && session.isOpened()) { 
    Request meRequest = Request.newMeRequest(session, new Request.GraphUserCallback() { 
    @Override 
     public void onCompleted(GraphUser graphUser, Response response) { 
      if(session == Session.getActiveSession()) { 
       // Check if the session is same as usual 
       ParseFacebookUtils.logIn(graphUser.getId(), session.getAccessToken(), 
         session.getExpirationDate(), new LogInCallback() { 
        @Override 
        public void done(ParseUser user, ParseException err) { 
         if (user == null) { 
          // The user wasn't saved. 
          System.out.println("User was not saved to Parse. "); 
         } else { 
          // The user has been saved to Parse. 
          System.out.println("User has successfully been saved to Parse."); 
          if (user.isNew()) { 
           // This user was created during this session with Facebook Login.      
           System.out.println("ParseUser created."); 
          } else { 
           // This user existed before. 
           System.out.println("User exists in Parse. Pull their values: " + user); 
          } 
         } 
        } 
       });  
      } 
     } 
    }); 
    meRequest.executeAsync(); 
} 

그래서, 페이스 북 사용자는 구문 분석 데이터베이스에 추가됩니다. 그러나 ParseFacebookUtils.logIn()을 사용하면 Facebook 세션을 CLOSED으로 만들고 Session.StatusCallback을 호출하므로 표시 조각을 다시 로그인 조각으로 전환 할 수 있습니다.

나는이 문제를 하루 종일 처리했지만 해결 방법을 찾을 수 없습니다. 아래 코드를 Application에 추가했지만 여전히 작동하지 않습니다.

Parse.enableLocalDatastore(this); 
Parse.initialize(this, Application_id, Client_key); 
ParseFacebookUtils.initialize(getString(R.string.facebook_app_id)); 

해결 방법이 있습니까? 나는 this을 읽었지만 아주 좋은 해결책은 제공되지 않습니다. 미리 감사드립니다!

+0

페이스 북 사용자를 구문 분석하여 연결하는 것을 포함하여 페이스 북 인증의 경우에도 마찬가지입니다. Session 클래스에 의해 반환 된 세션은 null이지만, Facebook 사용자가 구문 분석에 연결되어 있다면,'ParseFacebookUtils.getSession()'은 그렇지 않습니다. – reubenjohn

답변

2

오늘도 똑같은 일을하려고했습니다. facebook sdk의 UiLifecycleHelper를 사용하여 facebook 로그인을하고 그래프 api 요청을 작성하고 사용자를 Parse db에 추가했습니다. 그것이 당신이 언급 한 예에서 어떻게 이루어 졌는지입니다 - 저는 약간 구식이라고 생각합니다.

ParseFacebookUtils가 세션을 처리하고 우리가해야 할 일은 로그인 메소드를 호출하고 그래프 API 호출을 호출하고 이메일과 같은 사용자 데이터를 가져와 사용자 필드를 업데이트하는 것입니다.

private void parseFacebookLogin(){ 
     ParseFacebookUtils.logIn(this, PARSE_FB_LOGIN_CODE, new LogInCallback() { 
      @Override 
      public void done(ParseUser user, ParseException err) { 
       if (user == null) { 
        Log.d(tag, "Uh oh. The user cancelled the Facebook login."); 
       } else if (user.isNew()) { 
        Log.d(tag, "User signed up and logged in through Facebook!"); 
        Request.newMeRequest(ParseFacebookUtils.getSession(), graphUserCallback).executeAsync(); 
       } else { 
        Log.d(tag, "User logged in through Facebook!"); 
       } 
      } 
     }); 
    } 

GraphUserCallback graphUserCallback = new GraphUserCallback() { 
     @Override 
     public void onCompleted(GraphUser user, Response response) { 
      if (user != null){ 
       getUserDataFacebook(user); 
       Log.d(tag, response.toString()); 
      } 
     } 
    }; 

private void getUserDataFacebook(GraphUser user){ 
//get user data here 
} 

체크 아웃 Facebook login에 구문 분석의 문서 :

는 여기에 몇 가지 코드입니다.

이 기능이 작동하는지 알려주세요.

관련 문제