Session.getActiveSession()在启动应用程序时返回null,尽管我已连接

时间:2013-08-18 05:24:48

标签: android facebook-android-sdk

我使用com.facebook.widget.UserSettingsFragment在我的应用中管理登录/注销到Facebook:

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");

在另一个Fragment(但Activity}中,在Facebook上发布之前我正在检查我是否使用

进行了记录
Session session = Session.getActiveSession();
if (session != null && session.isOpened()){
    publishOnFacebook(intent.getExtras());
}

当我启动我的应用并尝试发布时,我总是得到null Session,但我之前登录过。当我开始UserSettingsFragment时,它告诉我我已经连接了。

如果我实际连接,Session.getActiveSession();如何null

此外,如果我开始Fragment我在UserSettingsFragment之后直接发布,我会得到正确的Session,即:

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

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

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:34)

好的,我刚读过openActiveSessionFromCache(不是来自Facebook doc):

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

答案 1 :(得分:0)

7月的answer对我不起作用。所以我尝试了这个:

如果您之前已登录并且重新启动了应用程序,则会话可能不会为空,并且可能处于CREATED_TOKEN_LOADED状态。此状态表示会话尚未打开并具有缓存的令牌。在此状态下打开会话不会涉及用户交互。要从此状态打开会话,可以调用session.openForRead(null)方法。这会立即打开会话而无需任何用户交互。

因此请检查以下代码:

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