如何在Android应用中保持与Facebook的连接

5
我正在开发一个应用程序,需要集成Facebook的社交功能。
在我的应用程序中,有一个按钮将用户连接到他的Facebook个人资料页面。当用户按下此按钮时,我只会打开一个包含用户Facebook页面的网页视图。现在假设我知道他的电子邮件和密码,并且我想自动连接他,让他不必每次都输入电子邮件和密码。我尝试通过我的下一个问题来解决它,但是你可以看到没有成功。
我还尝试使用CookieSyncManager、CookieManager和手动处理来保持cookie。
我认为我可以通过更改发送给webView的url来解决它,但我不知道哪个url。(尝试了http://www.facebook.com/connect/connect_to_external_page_widget_loggedin.phphttp://www.facebook.com/plugins/login.php,然后连接用户Facebook页面的url,例如http://www.facebook.com/UserProfile
非常感谢任何帮助!
谢谢。

你正在使用Android SDK吗?https://developers.facebook.com/docs/mobile/android/sso/ - Ahmed Nuaman
@Ahmed Nuaman 是的,我正在使用Facebook SDK,并尝试使用单点登录。请查看我的下一个问题 - Ofir A.
3个回答

4

您无法手动登录用户到Facebook。这就是oAuth的全部意义,该过程应对您的应用程序透明,并且当用户完成身份验证时,您的应用程序将仅获得AccessToken。

从那时起,AccessToken几乎可以永远留在您这里。

只有在以下情况下,它才会失效:

  1. Session expires

    This can be solved by adding a call to your onResume() assuming you are using the Facebook Android SDK for authentication/integration of facebook. When this call is successful, your token will be valid for 60 days.

    public void onResume() {    
        super.onResume();
        facebook.extendAccessTokenIfNeeded(this, null);
    }
    
  2. User changes his password

  3. User de-authorizes your app

  4. User logs out of Facebook

    You can do nothing about these three cases! Your token will be invalidated and you will have to ask the user to re-authenticate using the normal flow.

跟随本教程将Facebook集成到你的Android应用程序中


谢谢你的回答。我像教程中所说的一样操作了,成功获得了访问令牌。我的问题是,如果用户已经使用有效的访问令牌进行过身份验证,那么我是否可以将用户重定向到我选择的 Facebook 页面? - Ofir A.
有没有可能禁用SSO?这是一个解决方案。否则,这是不可行的,因为(如果我没记错的话)Facebook应用程序不需要WebView让用户登录。 - Sherif elKhatib
如果我想以其他方式打开我的Facebook页面,而不是在webView中怎么办?比如说Facebook应用程序或其他方式。再次明确一下,我有访问令牌并且它是有效的。我想使用用户的身份验证打开Facebook页面,以便他可以作为注册用户执行操作,而不需要再次输入密码和电子邮件。 - Ofir A.
如果我们禁用单点登录,也就是使用 Webview 而不是 Facebook 应用程序获取令牌,我们可能能够做到您想要的。但是,只要您使用 SSO(Facebook 应用程序),这是不可行的。 - Sherif elKhatib
如果您尝试使用Facebook应用程序登录,您会注意到没有打开WebViews,这意味着没有cookie可获取以便登录。如果您有用户的用户名/密码,则可能会有解决方法,但我猜它会很不稳定,因为您无法预测Facebook的行为,而且这样做并不是一个好习惯(不太可接受)。 - Sherif elKhatib
显示剩余2条评论

2

有一种方法可以使用SDK身份验证而不是SSO,如此处所述:如何在Android上禁用Facebook单点登录-Facebook-android-sdk
但我认为这只会导致糟糕的用户体验,因为用户需要输入他的电子邮件/密码,这对于大多数移动设备来说并不是一项有趣的任务。

如果用户安装了Facebook应用程序(katana)(这意味着使用SSO),那么您应该能够通过使用意图打开用户配置文件。
我以前从未做过这个,但从以下两个线程中看来:
从其他应用启动Facebook应用

从Android应用程序打开Facebook页面
看起来你可以做类似这样的事情:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName("com.facebook.katana", "com.facebook.katana.ProfileTabHostActivity");
this.startActivity(intent);

0

要连接到Facebook,您必须先学习Oauth。 Oauth是一次性验证,用于访问Facebook详细信息。密码不需要每次输入。请查看此文档

还有这个文档也对您有用。


我正在使用单点登录,这是否就是你在Oauth中所指的? - Ofir A.
首先,您必须完全了解OAuth。OAuth是一次性登录过程,用于获取特定用户的Facebook数据。 - Akilan
我不需要任何用户数据,我只需要打开一个浏览器并进入他的Facebook页面。我已经使用了单点登录,但问题是我无法将他重定向到他的个人资料页面。 - Ofir A.
人在浏览器中登录 Facebook 页面,然后返回 App 基本上是不可能的。如果你这样做了,下次用户登录时需要密码验证。因此你必须使用 OAuth。这不仅涉及获取用户数据。 - Akilan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接