Android Facebook SDK openActiveSession(…)没有';t触发器回调

Android Facebook SDK openActiveSession(…)没有';t触发器回调,android,facebook,facebook-android-sdk,Android,Facebook,Facebook Android Sdk,我正在开发一个使用Facebook登录的应用程序。在应用程序启动时,调用Session.getActiveSession()返回null。我要检查会话是否为空,如果为空,请运行方法session.openActiveSession(活动活动、布尔allowLoginUI、状态回调) 我希望将该方法中的布尔值设置为false,因为如果需要,我希望将用户发送到自定义登录活动,并且将该参数设置为true将打开“基本登录权限”窗口(不需要)。但是,当我将参数设置为false时,该方法甚至不会触发会话状态

我正在开发一个使用Facebook登录的应用程序。在应用程序启动时,调用
Session.getActiveSession()
返回null。我要检查会话是否为空,如果为空,请运行方法
session.openActiveSession(活动活动、布尔allowLoginUI、状态回调)

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

更新:目的是在不使用标准LoginUi的情况下初始化
会话
对象。我已经尝试了我能想到的一切,但没有任何东西可以初始化会话。如果用户尚未登录,我想切换到另一个
活动
,在那里我有一个标准的
登录按钮

以下是我使用的代码:

@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);
}
@覆盖
创建时的公共void(Bundle savedInstanceState){
Session.StatusCallback callback=新建Session.StatusCallback(){
@凌驾
公共无效调用(会话、会话状态、异常){
Log.i(“MainActivity”,“调用会话回调”);
onSessionStateChange(会话、状态、异常);
}
};
session=session.getActiveSession();
if(会话==null){
Log.i(“MainActivity”,“会话为空”);
openActiveSession(this,false,回调);
}
否则{
if(session.isClosed()){
Log.i(“主活动”,“会话已关闭”);
startActivityForResult(新意图(“”),登录请求);
}
else if(session.isOpened()){
Log.i(“MainActivity”,“会话已打开”);
初始化活动();
}
}
uiHelper=新UiLifecycleHelper(此为回调);
uiHelper.onCreate(savedInstanceState);
}

在您的
onCreate()中尝试此操作


现在,Session.StatusCallback一直被调用……

在您的
onCreate()中尝试这个


所以,现在
Session.StatusCallback
一直被调用….

当然,在我提供了一笔赏金之后,我就明白了

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

if(Session.openActiveSession(this, false, callback) == null){
    //Start login activity
}

当然,在我悬赏之后,我就明白了

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

if(Session.openActiveSession(this, false, callback) == null){
    //Start login activity
}

我得到了同样的结果。如果会话为null且不存在savedInstsanceState,则此方法似乎不会将回调与会话关联。我得到了相同的结果。如果会话为null且没有savedInstsanceState,则此方法似乎不会将回调与会话关联。