Java 为登录创建Facebook会话的正确方法?

Java 为登录创建Facebook会话的正确方法?,java,android,facebook,facebook-login,facebook-android-sdk,Java,Android,Facebook,Facebook Login,Facebook Android Sdk,因此,我有一个带有“共享”按钮的对话框。当按下按钮时,它会调用一个方法,如果用户已经登录到Facebook,该方法将共享用户信息。但是,如果他们没有登录Facebook,我希望它首先允许用户登录,然后共享他们的信息。下面是我尝试在不使用登录按钮的情况下登录用户的情况: Session.OpenRequest openRequest = new Session.OpenRequest(GameActivity.this); StatusCallbac

因此,我有一个带有“共享”按钮的
对话框。当按下按钮时,它会调用一个方法,如果用户已经登录到Facebook,该方法将共享用户信息。但是,如果他们没有登录Facebook,我希望它首先允许用户登录,然后共享他们的信息。下面是我尝试在不使用
登录按钮的情况下登录用户的情况:

    Session.OpenRequest openRequest = new Session.OpenRequest(GameActivity.this);
                    StatusCallback callback = new StatusCallback(){

                        @Override
                        public void call(Session session, SessionState state, Exception exception) {
                            Log.d(TAG, "CALL");
                            if (Session.getActiveSession() != null && Session.getActiveSession().isOpened()){
                                Log.d(TAG, "sendBrag was called");
                                sendBrag();
                            }else{
                                Log.d(TAG, "session is not opened");
                            }
                            if (exception != null){
                                Log.d(TAG, "caught exception in call method");
                            }
                        }
                    };
                    openRequest.setCallback(callback);
                    openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
                    openRequest.setPermissions(PERMISSIONS);
                    Session session = new Session(GameActivity.this);
                    session.openForPublish(openRequest);
                    Session.setActiveSession(session);
其中,
权限
为:

private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
private Session.StatusCallback statusCallback = new SessionStatusCallback();
private static final List PERMISSIONS=Arrays.asList(“publish_actions”);

问题是它从未登录!我要么收到一条“检查网络连接”(即使我的网络连接正常)的
Toast
消息,要么什么也没发生。但从日志中我可以看出,会话从未打开过总而言之:如何使用
会话
类正确登录Facebook?我错过了什么?任何帮助、建议或建议都将不胜感激,谢谢

我从
Facebook SDK
的samples文件夹中的
SessionLoginSample
中找到了问题的解决方案。首先,在我的活动中的
onCreate
方法中,我放置了以下代码:

    Session session = Session.getActiveSession();
    if (session == null) {
        if (savedInstanceState != null) {
            session = Session.restoreSession(this, null, statusCallback, savedInstanceState);
        }
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
            session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
        }
    }
其中
statusCallback
为:

private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
private Session.StatusCallback statusCallback = new SessionStatusCallback();
我的活动中的
SessionStatusCallback
内部类是:

    private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        if (session.isOpened() && session != null){
            sendBrag();
        }
    }
}//end of SessionStatusCallback class
然后,我创建了一个方法,用于在用户尚未登录时处理登录Facebook的问题:

    private void onClickLogin() {
    Session session = Session.getActiveSession();
    if (!session.isOpened() && !session.isClosed()) {
        session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
    } else {
        Session.openActiveSession(this, true, statusCallback);
    }
}//end of onClickLogin() method
我通过“共享”按钮调用了它。最后,我认为代码中最重要的部分是
onActivityResult()
方法(我相信这可能是我以前遇到错误的地方,因为我的代码中没有这个错误):

    @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}//end of onActivityResult() method

这就是他们真正想要的。尽管如此,我不知道为什么它完全有效,因为我使用了
openForRead
方法而不是
openForPublish
,但它似乎有效。我希望这能对那些与我遇到的问题相同的人有所帮助。

我从
Facebook SDK的samples文件夹中的
SessionLoginSample
中找到了问题的解决方案。首先,在我的活动中的
onCreate
方法中,我放置了以下代码:

    Session session = Session.getActiveSession();
    if (session == null) {
        if (savedInstanceState != null) {
            session = Session.restoreSession(this, null, statusCallback, savedInstanceState);
        }
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
            session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
        }
    }
其中
statusCallback
为:

private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
private Session.StatusCallback statusCallback = new SessionStatusCallback();
我的活动中的
SessionStatusCallback
内部类是:

    private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        if (session.isOpened() && session != null){
            sendBrag();
        }
    }
}//end of SessionStatusCallback class
然后,我创建了一个方法,用于在用户尚未登录时处理登录Facebook的问题:

    private void onClickLogin() {
    Session session = Session.getActiveSession();
    if (!session.isOpened() && !session.isClosed()) {
        session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
    } else {
        Session.openActiveSession(this, true, statusCallback);
    }
}//end of onClickLogin() method
我通过“共享”按钮调用了它。最后,我认为代码中最重要的部分是
onActivityResult()
方法(我相信这可能是我以前遇到错误的地方,因为我的代码中没有这个错误):

    @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}//end of onActivityResult() method
这就是他们真正想要的。尽管如此,我不知道为什么它完全有效,因为我使用了
openForRead
方法而不是
openForPublish
,但它似乎有效。我希望这能对那些和我有同样问题的人有所帮助