这个问题一直困扰着我。在我的模拟器上,当然,那里没有facebook应用程序,因此当我触发打开的活动会话时,它会进入我的浏览器。现在,我在带有facebook应用程序的设备上测试它,它会触发应用程序并要求登录。这是问题所在,在模拟器或没有facebook应用程序的设备上,它使用此代码正确识别会话。
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");
}
}
});
}
但是在具有faceboook应用程序的设备中,会话始终为null。所以倾向于再次启动Session.openActiveSession,每当我检查它时,我总是会关闭一个会话。有什么想法的家伙有什么问题?我的方法是错误的,这就是为什么它只能通过浏览器登录facebook?任何帮助将得到充分的赞赏。谢谢!
答案 0 :(得分:1)
您是否在Facebook SDK中启用了会话跟踪?您需要在UiLifecycleHelper
Activity
中创建onCreate()
:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(getActivity(), callback);
uiHelper.onCreate(savedInstanceState);
}
传递给构造函数的callback
与您在上面的代码中创建的相同(您是匿名的)。
在此之后,您需要将Activity
生命周期方法中的匹配调用发送到UiLifecycleHelper
的相同调用。这将允许Facebook SDK跟踪您的会话。
@Override
public void onResume() {
super.onResume();
uiHelper.onResume();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
您可以在tutorial中找到更多详细信息。你可能跟着他们更简单的"入门"教程而不是更深入的"登录"一。用户是否通过应用程序登录(因为它已安装)或浏览器不应影响会话跟踪(如果已正确设置)。