Infinite loop after login with Facebook SDK

763 Views Asked by At

I've followed tutorial on facebook developers for connect my android app with facebook user's account. This is my code, so close to tutorial code:

private UiLifecycleHelper uiHelper;
private LoginButton login_button;

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

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.facebook_login_fragment,
            container, false);

    login_button = (LoginButton) view.findViewById(R.id.login_facebook);
    login_button.setFragment(this);
    // permissions
    // login_button.setReadPermissions(Arrays.asList("publish_actions"));

    return view;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    uiHelper = new UiLifecycleHelper(getActivity(), callback);
    uiHelper.onCreate(savedInstanceState);
}

@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);
    // TODO success

    Session session = Session.getActiveSession();
    if (session != null && !session.isClosed()) {
        Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
                this, "publish_actions");
        session.requestNewPublishPermissions(newPermissionsRequest);
    }

}

@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 void onSessionStateChange(Session session, SessionState state,
        Exception exception) {
    if (state.isOpened()) {
        Log.i("FACEBOOK", "Logged in...");

    } else if (state.isClosed()) {
        Log.i("FACEBOOK", "Logged out...");
    }
}

but after login, my code goes on infinite loop inside onSessionStateChange function (on logout this problem doesn't appear). What's wrong?

2

There are 2 best solutions below

2
On

try deleting the part under "// TODO success" in onActivityResult, do everything in onSessionStateChange

0
On

You can't request for any permission in login process. once login process completed then only request for permissions in another event(like pressing another button something).