我的应用中有一个Facebook登录功能。现在我的代码在模拟器中运行良好。但是当我尝试将其测试到Android手机时。没有错误,但即使我已登录,会话似乎也始终关闭。
这是我的代码:
Session session = Session.getActiveSession();
//check if user is logged in at facebook
if (session != null && session.isOpened()) {
Log.i("", "Session Open");
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
facebookId = user.getId();
loginType = 2;
LogMeIn();
}
}
});
}
else
{
Log.i("", "Session Closed");
// start Facebook Login
Session.openActiveSession(this, true, new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
Log.i("", "Session Open");
// make request to the /me API
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response) {
Log.i("", "Complete");
if (user != null) {
facebookId = user.getId();
loginType = 2;
LogMeIn();
}
}
});
}
else
{
Log.i("", "Session Closed"); //I always end up here
}
}
});
}
如你所见。在会话更改后检查会话时,我总是在会话关闭部分结束。我不知道什么是错的,但这似乎适用于模拟器。现在,没有发生获取图形用户信息的代码。有任何想法吗?谢谢!
其他信息:我试图退出我的fb帐户。并点击我的应用程序上的登录按钮。它将我重定向到facebook的登录屏幕,但同样,由于会话已关闭,因此没有发生获取图形用户的代码。
答案 0 :(得分:1)
如果您在片段中使用session,请尝试使用此代码,它适用于我:
else {
Log.d("ss", "Session Closed");
// start Facebook Login
Session.openActiveSession(getActivity(),
MyFragment.this, true, callback);
}
不要忘记UiLifecycleHelper
使用onActivityResult
,onResume
,onCreate
,onDestroy
,onSaveInstancceState
...
或者自己管理会话以保存状态。