Facebook通过应用程序登录VS通过Android应用程序中的设备浏览器登录
Posted
技术标签:
【中文标题】Facebook通过应用程序登录VS通过Android应用程序中的设备浏览器登录【英文标题】:Facebook login via app VS via device browser in android app 【发布时间】:2014-04-19 21:22:46 【问题描述】:这个问题一直困扰着我。当然,在我的模拟器上,那里没有 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");
);
但是,在具有 Facebook 应用程序的设备中,会话始终为空。因此,趋势是再次启动 Session.openActiveSession 并且每次检查时我总是最终关闭会话。有什么想法的家伙有什么问题吗?我的方法是否错误,这就是为什么它只能在通过浏览器登录 facebook 时运行良好?任何帮助将不胜感激。谢谢!
【问题讨论】:
【参考方案1】:您是否在 Facebook SDK 中启用了会话跟踪?您需要在您的Activity
的onCreate()
中创建一个UiLifecycleHelper
:
@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 中找到更多详细信息。您可能遵循了他们更简单的“入门”教程,而不是更深入的“登录”教程。无论用户是通过应用程序登录(因为它已安装)还是浏览器都不会影响会话跟踪(如果您已正确设置)。
【讨论】:
以上是关于Facebook通过应用程序登录VS通过Android应用程序中的设备浏览器登录的主要内容,如果未能解决你的问题,请参考以下文章
Facebook通过iOS中的Facebook SDK通过应用程序登录?
Parse - 通过 Facebook 应用程序登录 Facebook
Facebook 登录(网络)看不到通过 facebook 设备应用程序登录的用户
如何在 React Native 中进行 Facebook 登录?