无法将Facebook集成到我的android应用程序中

无法将Facebook集成到我的android应用程序中,android,facebook,Android,Facebook,我正在将通过Facebook登录集成到我的应用程序中。我有以下代码显示登录: Session.openActiveSession(getActivity(), true, new Session.StatusCallback() { // callback when session changes state public void call(Session session, SessionState state, Exception exception) {

我正在将通过Facebook登录集成到我的应用程序中。我有以下代码显示登录:

Session.openActiveSession(getActivity(), true, new Session.StatusCallback() {

    // callback when session changes state
    public void call(Session session, SessionState state, Exception exception) {
        if (session.isOpened()) {
            Log.d("s", "SUCCES");
            // make request to;2 the /me API
        }

        if (exception != null) {
            Log.d("s", exception.toString());
        }

        Log.d("s", "state:" + state.toString());
    }
});
输入用户名/密码后,我会在日志中看到:

 D/app﹕ com.facebook.FacebookException: Log in attempt aborted.
 D/app﹕ state:CLOSED_LOGIN_FAILED
 D/app﹕ state:OPENING
我所尝试的:

检查我的包名是否正确 检查哈希键是否正确facebook使用的代码 使我的应用程序退出沙盒模式。 检查我的清单文件中是否有正确的应用程序id 我做错了什么


谢谢

我认为您有这个问题,因为您已经有了一个活动会话。所以,在尝试重新打开它之前,只需测试它

 Session.StatusCallback statusCallback = new Session.StatusCallback() {

// callback when session changes state
public void call(Session session, SessionState state, Exception exception) {
    if (session.isOpened()) {
        Log.d("s", "SUCCES");
        // make request to;2 the /me API
    }

    if (exception != null) {
        Log.d("s", exception.toString());
    }

    Log.d("s", "state:" + state.toString());
}


Session session = Session.getActiveSession();
if (session!=null && !session.isOpened() && !session.isClosed()) {
    session.openForRead(new Session.OpenRequest(this)
        .setPermissions(...)
        .setCallback(statusCallback));
} else {
    Session.openActiveSession(getActivity(), true, statusCallback);
}

通过阅读Facebook的SDK代码,我们可以得出一些结论

您在回调中得到一个带有特定消息和状态的异常。只有在调用close会话的方法时,当状态为Open时,才会发送这两个消息,setActiveSession会同时调用该状态,而您的会话会直接调用该状态。openActiveSession

接下来调用的是session.openForReadopenRequest,它调用openopenRequest,…,当前状态为创建新会话后的默认状态。这将通过setActiveSessionsession将新会话设置为活动会话,如果有一个会话处于活动状态,则会关闭旧会话。同样,您会收到一个FacebookException,消息中的登录尝试被中止,只有在前一个会话的当前状态为打开时才会调用该会话

所有这一切都意味着要么您在短时间内调用了这段代码两次,要么授权过程没有完成,很可能会陷入死胡同

在深入了解authorize方法之前,我将仔细检查facebook模式下的配置、密钥散列(根据启动环境的不同而有所不同:production、degub等)、包名和start activity。为简单起见,每次尝试或手动调用代码中的closeAndClearTokenInformation时,都要清除应用程序的数据和缓存


让我们看看到底是什么导致了这个问题。

您收到了相同的错误消息吗?i、 e.你没有遇到openForRead?@0xSina你看到我的问题了吗?得到一个NullPointerException作为'!session.isopend&!session.isClosed'因为会话为空,所以需要进行空检查。我添加了一个空检查会话!=空&!session.isopend&!session.isClosed'和空检查?结果如何?请注意,根据您发布的日志:似乎callback.call方法被调用了两次:第一次调用时出现异常,状态为CLOSED\u LOGIN\u失败,第二次调用时出现异常,状态为OPENING。谢谢,这与null检查一起工作。我已经接受了你的回答,将在16小时内给我赏金。再次感谢您的帮助@ben75!