0

我正在开发一个使用 Facebook 登录的应用程序。在应用程序启动时,调用Session.getActiveSession()返回 null。我检查会话是否为空,如果是,则运行该方法Session.openActiveSession(Activity activity, boolean allowLoginUI, StatusCallback callback)

我想将该方法中的布尔值设置为 false,因为如果需要,我想将用户发送到自定义登录活动,并将该参数设置为 true 会打开基本登录权限窗口(不需要)。但是当我将参数设置为 false 时,该方法甚至不会触发会话状态更改,也不会触发关联的回调(第三个参数)。如果我将参数设置为 true,然后退出后续对话框,则会触发回调。

更新:目的是在Session不使用标准 LoginUi 的情况下初始化对象。我已经尝试了我能想到的一切,没有任何东西可以初始化会话。如果用户尚未登录,我想更改为另一个Activity我有标准LoginButton.

这是我正在使用的代码:

@Override
public void onCreate(Bundle savedInstanceState) {

    Session.StatusCallback callback = new Session.StatusCallback() {
        @Override
        public void call(Session session, SessionState state, Exception exception) {
            Log.i("MainActivity", "calling session callback");
            onSessionStateChange(session, state, exception);
        }
    };
    session = Session.getActiveSession();
    if(session==null){
        Log.i("MainActivity", "session is null");
        Session.openActiveSession(this, false, callback);
    }
    else{
        if(session.isClosed()){
            Log.i("MainActivity", "session is closed");
            startActivityForResult(new Intent("<custom login activity>"), LOGIN_REQUEST);
        }
        else if(session.isOpened()){
            Log.i("MainActivity", "session is opened");
            initializeActivity();
        }
    }
    uiHelper = new UiLifecycleHelper(this, callback);
    uiHelper.onCreate(savedInstanceState);
}
4

2 回答 2

3

当然,在我提出赏金之后,我就明白了。

首先我检查是否Session为空,这似乎是每次我启动应用程序时,所以这可能没有必要。但关键是检查用于打开活动会话的方法的返回值,如果返回 null,则转到登录活动。这样,我不仅检查 的返回值Session,而且检查方法的返回值。

if(Session.openActiveSession(this, false, callback) == null){
    //Start login activity
}
于 2013-08-02T03:30:13.243 回答
0

试试这个onCreate()

 Session session = Session.getActiveSession();
    if (session == null) {
        if (savedInstanceState != null) {
            session = Session.restoreSession(activity, null, callback, savedInstanceState);
        }
        if (session == null) {
            session = new Session(activity);
        }
        Session.setActiveSession(session);
    }

所以,现在Session.StatusCallback一直被称为......

于 2013-06-01T05:17:23.057 回答