Home » Android » android – Session.getActiveSession() returns null when starting the app, although I'm connected

android – Session.getActiveSession() returns null when starting the app, although I'm connected

Posted by: admin June 15, 2020 Leave a comment

Questions:

I use com.facebook.widget.UserSettingsFragment to manage login/logout to Facebook in my app:

UserSettingsFragment userSettingsFragment = new UserSettingsFragment();
Session session = Session.getActiveSession();
if(session==null || session.isClosed()){
    userSettingsFragment.setPublishPermissions(Arrays.asList("publish_actions"));
}
fragmentTransaction.replace(R.id.content_container, userSettingsFragment, "userSettingsFragment");

In another Fragment (but same Activity), Before publishing on Facebook I’m checking whether I’m logged using

Session session = Session.getActiveSession();
if (session != null && session.isOpened()){
    publishOnFacebook(intent.getExtras());
}

When I start my app and try to publish, I always get a null Session although I logged in before. And when I start UserSettingsFragment, it shows me that I’m connected.

How can Session.getActiveSession(); be null if I’m actually connected?

Moreover, if I I start the Fragment where I do the publishing straight after UserSettingsFragment, I get the correct Session, i.e.:

1 start the app
2 call `Session.getActiveSession()` in another `Fragment` returns `null`
3 start `UserSettingsFragment` shows that I'm log

but

1 start the app
2 start `UserSettingsFragment` shows that I'm log
3 call `Session.getActiveSession()` in another `Fragment` returns a session

Anybody can help?

How to&Answers:

Ok, I’ve just read about openActiveSessionFromCache (not from Facebook doc though):

Session session = Session.getActiveSession(); 

if(session==null){                      
    // try to restore from cache
    session = Session.openActiveSessionFromCache(getActivity());
}

if(session!=null && session.isOpened()){    
    publishOnFacebook(intent.getExtras());  
}
else{
    login();
}

Answer:

Jul’s answer does not work for me. So I tried this:

If you had loggedin earlier and if you restarted the app then the session may not be null and it could be in the CREATED_TOKEN_LOADED state. This state implies that the Session has not yet been opened and has a cached token. Opening a Session in this state will not involve user interaction. To open the session from this state you can call the method session.openForRead(null). This immediately opens the session without any user interaction.

So check for this add the following code:

Session session = Session.getActiveSession();
if (session != null){
    if(session.getState() == SessionState.CREATED_TOKEN_LOADED){
        //this immediately opens the session
        session.openForRead(null);
    }
    if(session.isOpened()) {
        publishOnFacebook(intent.getExtras());
    }
    else{
        //start the facebook login fragment or activity
        login();
    }
}
else{
    login();
}