无法将Facebook整合到我的Android应用程序中

时间:2014-06-09 00:12:22

标签: android facebook

我正在我的应用程序中通过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

我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为你有这个问题,因为你已经有了一个活跃的会话。所以在尝试重新打开之前先测试一下。

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

答案 1 :(得分:0)

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

您的回调会收到特定消息和状态的异常。这两个只在调用close()Session方法时发送,而状态为OPENING,同时由setActiveSession调用,并且由Session.openActiveSession(...)直接调用一个

接下来要调用的是session.openForRead(openRequest),它调用open(openRequest, ...),当前状态为CREATED(构建新会话后的默认状态)。这会将新会话设置为通过setActiveSession(session)的活动会话,如果有一个活动会结束,那么最终会关闭oldSession,而这又是一件事,你将获得一个FacebookException,其中包含"登录企图中止"在消息上,只有在前一个会话的当前状态为OPENING时才会被调用。

所有这一切都意味着你要么在很短的时间内两次调用这段代码,要么授权过程没有经过并最终走向死胡同(最有可能)。

在深入了解授权方法之前,我将在facebook中仔细检查配置(模式,密钥哈希 - 根据启动环境的不同而不同:生产,degub等,包名称和启动活动)。为简单起见,请在每次尝试时清除应用中的数据和缓存(或从代码中手动调用closeAndClearTokenInformation()

让我们看看为了继续深入研究这个问题。