我正在我的应用程序中通过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
我尝试过的事情:
我做错了什么?
谢谢!
答案 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(...)
直接调用一个1} p>
接下来要调用的是session.openForRead(openRequest)
,它调用open(openRequest, ...)
,当前状态为CREATED
(构建新会话后的默认状态)。这会将新会话设置为通过setActiveSession(session)
的活动会话,如果有一个活动会结束,那么最终会关闭oldSession,而这又是一件事,你将获得一个FacebookException,其中包含"登录企图中止"在消息上,只有在前一个会话的当前状态为OPENING时才会被调用。
所有这一切都意味着你要么在很短的时间内两次调用这段代码,要么授权过程没有经过并最终走向死胡同(最有可能)。
在深入了解授权方法之前,我将在facebook中仔细检查配置(模式,密钥哈希 - 根据启动环境的不同而不同:生产,degub等,包名称和启动活动)。为简单起见,请在每次尝试时清除应用中的数据和缓存(或从代码中手动调用closeAndClearTokenInformation()
。
让我们看看为了继续深入研究这个问题。