Android--Facebook Login with LoginButton

1、Layout文件添加Facebook的LoginBurtton

1 <com.facebook.widget.LoginButton
2             android:id="@+id/authButton"
3             android:layout_width="fill_parent"
4             android:layout_height="wrap_content"
5             android:layout_gravity="center_horizontal"
6             android:layout_marginLeft="45dp"
7             android:layout_marginRight="45dp"
8             android:layout_marginTop="10dp"
9             android:background="#FF3B5790" />

2、 创建MainFragment 类,并且继承Fragment 类,

重写onCreateView()方法  ;通过LoginButton设置权限 setReadPermissions()    更多权限访问 http://developers.facebook.com/docs/reference/login/#permissions

        重写 onSessionStateChange()方法  ,作用:当session状态改变时调用该方法,state.isOpened() 为 true 时,则证明登录成功

private UiLifecycleHelper uiHelper;
private LoginButton authButton;

 @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        uiHelper = new UiLifecycleHelper(getActivity(), callback);
        uiHelper.onCreate(savedInstanceState);
     authButton = (LoginButton) view.findViewById(R.id.authButton);
        authButton.setFragment(this);
        authButton.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
        authButton.setReadPermissions(Arrays.asList("email", "user_likes", "user_status"));
    }



 @Override
    public void onResume()
    {
        super.onResume();
        Session session = Session.getActiveSession();
        if (session != null && (session.isOpened() || session.isClosed()))
        {
            onSessionStateChange(session, session.getState(), null);
        }
        uiHelper.onResume();
    }

    @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);
    }

    private Session.StatusCallback callback = new Session.StatusCallback()
    {
        @Override
        public void call(Session session, SessionState state, Exception exception)
        {
            onSessionStateChange(session, state, exception);
        }
    };
 private void onSessionStateChange(Session session, SessionState state, Exception exception)
    {
        if (state.isOpened())
        {

            loginByFacebookFinished(session);

        }
        else if (state.isClosed())
        {
        }
    }



/**
*登陆成功
**/
private void loginByFacebookFinished(final Session session) { Request request = Request.newMeRequest(session, new GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { dismissLoadingDlg(); try { AccountInfo accountInfo = null; accountInfo = new AccountInfo(); accountInfo.setVip(false); accountInfo.setHasLogin(true); accountInfo.setToken(session.getAccessToken()); //用户信息 if (user != null) { accountInfo.setShowUserName(user.getName()); accountInfo.setPassword(user.getLink()); accountInfo.setLoginType(LoginType.FACEBOOK); accountInfo.setEmail(user.getProperty("email") + ""); accountInfo.setLoginName(user.getProperty("name") + ""); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); request.executeAsync(); }

3、退出登录

 /**
     * Logout From Facebook 
     */
    public  void callFacebookLogout(Context context) {
        Session session = Session.getActiveSession();
        if (session != null) {
            
            if (!session.isClosed()) {
                session.closeAndClearTokenInformation();
                //clear your preferences if saved
            }
        } else {
            
            session = new Session(context);
            Session.setActiveSession(session);
            
            session.closeAndClearTokenInformation();
            //clear your preferences if saved
        }
        
    }
原文地址:https://www.cnblogs.com/crane13/p/4059490.html