2015-03-31 81 views
0

我已經在我的應用程序中集成了Facebook登錄。它工作正常,並在回調方法,我得到獲取facebook用戶個人資料數據,android?

這是我的代碼

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(this.getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 
    setContentView(R.layout.activity_login); 
    findViewById(R.id.sign_in_button).setOnClickListener(this); 

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(Plus.API) 
      .addScope(Plus.SCOPE_PLUS_LOGIN) 
      .build(); 
    loginButton = (LoginButton) findViewById(R.id.login_button); 
    loginButton.setReadPermissions("basic_info","user_friends","email"); 
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      // App code 
      Log.e("res",""+loginResult.getAccessToken()); 
      Toast.makeText(LoginActivity.this,""+loginResult.getAccessToken().getUserId(),Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onCancel() { 
      // App code 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      // App code 
     } 
    }); 
} 

當我打印的訪問令牌,我得到

{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[user_friends, contact_email, email, public_profile, basic_info]} 

我是如何得到用戶的尋找從FB PROFILE DATA

的方法,數據

GraphRequest request = GraphRequest.newMeRequest(
    accessToken, 
    new GraphRequest.GraphJSONObjectCallback() { 
     @Override 
     public void onCompleted(
       JSONObject object, 
       GraphResponse response) { 
      // Application code 
     } 
    }); 
    Bundle parameters = new Bundle(); 
    parameters.putString("fields", "id,name,link"); 
    request.setParameters(parameters); 
    request.executeAsync(); 

但它要求一個seeion。我從哪裏得到會議?

+0

什麼是你想要獲得的所有數據? – Shadow 2015-03-31 10:06:27

+0

你得到的錯誤是什麼? AccessToken是SDK v4中Session的替代品。 – 2015-03-31 18:20:50

回答

0

這裏是一個狀態回調和會話處理完整的代碼..

public class LoginFragment extends Fragment { 
    private LoginButton facebookButton; 
    private UiLifecycleHelper uiHelper; 
    //use this 
    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(getActivity(), callback); 
    uiHelper.onCreate(savedInstanceState); 
} 
    @Override 
public void onResume() { 
    super.onResume(); 
    try { 

     // For scenarios where the main activity is launched and user 
     // session is not null, the session state change notification 
     // may not be triggered. Trigger it if it's open/closed. 
     Session session = Session.getActiveSession(); 
     if (session != null && (session.isOpened() || session.isClosed())) { 
      if (pDialog != null) { 
       onSessionStateChange(session, session.getState(), null); 
      } 
     } 

     uiHelper.onResume(); 
    } catch (Exception e) { 
     Log.e(Constants.TAG_EXCEPTION, e.toString()); 
    } 
} 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    uiHelper.onActivityResult(requestCode, resultCode, data); 
} 

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

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

public void showLoggedInUserInfo(final Session session) { 

    // Make an API call to get user data and define a 
    // new callback to handle the response. 
    Request request = Request.newMeRequest(session, 
      new Request.GraphUserCallback() { 

       @Override 
       public void onCompleted(GraphUser user, Response response) { 
        // If the response is successful 
        if (session == Session.getActiveSession()) { 
         if (user != null) { 
          fbFirstName = user.getFirstName(); 
          fbLastName = user.getLastName(); 
          fbEmail = user.asMap().get("email").toString(); 

         } 
        } 

       } 
private void onSessionStateChange(Session session, SessionState state, 
     Exception exception) { 

    if (state.isOpened()) { 
     showLoggedInUserInfo(session); 

    } else if (state.isClosed()) { 
     // Logged out 
    } 
} 

      }); 

    request.executeAsync(); 
} 
+0

是的權限在那裏 – WISHY 2015-03-31 10:18:31

+0

PLease檢查我已經更新了代碼。 – WISHY 2015-03-31 10:48:34

+0

我已更新answer.please檢查它.. – Shadow 2015-03-31 12:43:01

1

您可以使用可用的信息,登錄後,使用文件類。

Profile.getCurrentProfile() //get current instance of logged profile 
Profile.getCurrentProfile().getId() //get current id 
Profile.getCurrentProfile().getName() //get current user name 

更多關於它,在documentation

相關問題