Android 版 Facebook SDK 让用户可以通过 Facebook 登录注册您的应用。通过 Facebook 登录您的应用时,用户可以向应用授予权限,以便您可以检索信息或以用户的身份在 Facebook 执行操作。

如 果使用 Android 版 Facebook SDK 4.14.0 开发应用,Facebook 登录功能就会自动与 Facebook Lite 集成。如果用户未安装 Android 版 Facebook 应用,Facebook 登录就会使用 Facebook Lite,展示登录界面并获得登录凭证。旧版 SDK 要求用户必须安装 Facebook 应用。

要详细了解 Facebook 登录,请参阅登录门户。要详细了解使用案例和功能,请参阅概览。如需获取关于权限的信息,请参阅 Android 权限管理和 Facebook 登录相关的权限。

按照以下步骤部署 Facebook 登录:

1.前提条件

2.添加 Facebook“登录”按钮

3.注册回调,处理登录结果

4.启用 Chrome 自定义选项卡

5.检查登录状态

另请参阅后续步骤了解进阶主题。

1.前提条件

开始实施 Facebook 登录之前,请确保已完成下列设置。

A. 下载 Facebook 应用

点击下方的按钮,下载 Facebook 应用。

下载 Android 版 Facebook

B. 创建开发者帐户

如果没有 Facebook 开发者帐户,请点击下面的按钮创建。您可以通过 Facebook 开发者帐户使用开发者工具和创建 Facebook 应用。

创建开发者帐户

C. 下载 Android SDK

下载最新的 Android 版 Facebook SDK。

下载 Android SDK

D. 获得 Facebook 应用编号、添加 SDK、以及向资料页添加密钥散列

点击下方的按钮,按照快速入门操作,也可以按照新手入门中的步骤操作。

Android 快速入门

E. 为应用启用单点登录

为应用启用单点登录的方法是:在 Facebook 开发者网站的我的应用中选择您的应用,然后选择应用的设置,并将单点登录设置为

F. 将 FacebookActivity 添加到 AndroidManifest.xml 中。

<activity android:name="com.facebook.FacebookActivity"android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:label="@string/app_name" />

2.添加 Facebook“登录”按钮

将 Facebook 登录添加到应用的最简单方法是从 SDK 添加 LoginButton。这是 Button 的自定义视图实施。您可以在应用中使用该按钮实施 Facebook 登录。

您可以结合 LoginButton 使用 SDK 提供的以下类:

  • LoginManager — 使用请求的读取或发布权限开始登录流程。
  • CallbackManager — 用于将调用按指定路径发送回 Facebook SDK 及您注册的回调。您应从开始活动或 onActivityResult 片段调用它。
  • AccessToken:— 使用该类图谱 API 请求。它会显示用户编号以及用户接受和拒绝的权限。
  • Profile — 该类包含关于已登录用户的基本信息。

LoginButton 是一个界面元素,其中包含 LoginManager 具备的功能。因此,当用户点击此按钮时,就会以 LoginManager 中设置的权限开始登录。按钮随登录状态变化,并根据用户的身份验证状态显示正确文本。

要添加 Facebook 登录按钮,请先将其添加到布局 XML 文件中,并使用完整的类名称 com.facebook.widget.LoginButton

<com.facebook.login.widget.LoginButtonandroid:id="@+id/login_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_marginTop="30dp"android:layout_marginBottom="30dp" />   

然后在界面中设置按钮:将按钮添加到片段中,并更新活动以使用片段。

您可以自定义 Login button 的属性,并在 onCreateView() 方法中注册一个回调。

您可以自定义的属性包括 LoginBehaviorDefaultAudienceToolTipPopup.Style 以及 LoginButton 的相关权限。例如:

@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.splash, container, false);loginButton = (LoginButton) view.findViewById(R.id.login_button);loginButton.setReadPermissions("email");// If using in a fragmentloginButton.setFragment(this);    // Other app specific specialization// Callback registrationloginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {@Overridepublic void onSuccess(LoginResult loginResult) {// App code}@Overridepublic void onCancel() {// App code}@Overridepublic void onError(FacebookException exception) {// App code}});
}

如果您在片段中使用 LoginButton,需要通过调用 setFragment 来设置按钮上的片段,如图所示。

之后您需要调用 FacebookSdk.sdkInitialize 来初始化 SDK,然后调用 CallbackManager.Factory.create 来创建回调管理器,以便处理登录响应。以下是在片段中添加回调的示例:

public class MainActivity extends FragmentActivity {CallbackManager callbackManager;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);FacebookSdk.sdkInitialize(getApplicationContext());callbackManager = CallbackManager.Factory.create();LoginButton loginButton = (LoginButton) view.findViewById(R.id.usersettings_fragment_login_button);loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { ... });}

最后您应调用 callbackManager.onActivityResult,以便通过 callbackManager 将登录结果传递至 LoginManager

3.注册回调

为了响应登录结果,您需要使用 LoginManagerLoginButton 注册回调。如果您使用 LoginButton 注册回调,就不需要在登录管理器中注册回调。

将回调添加到活动或片段的 onCreate() 方法:

@Override
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);FacebookSdk.sdkInitialize(this.getApplicationContext());callbackManager = CallbackManager.Factory.create();LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback<LoginResult>() {@Overridepublic void onSuccess(LoginResult loginResult) {// App code}@Overridepublic void onCancel() {// App code}@Overridepublic void onError(FacebookException exception) {// App code   }});
}

如果登录成功,LoginResult 参数将拥有新的 AccessToken 及最新授予或拒绝的权限。

您不需要 registerCallback 来保证登录成功,可以选择使用下述 AccessTokenTracker 类跟踪当前访问口令的更改。

之后在 onActivityResult() 中,将登录结果转发到在 onCreate() 中创建的 callbackManager

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);callbackManager.onActivityResult(requestCode, resultCode, data);
}

您集成到 FacebookSDK 登录或分享的所有活动和片段都应将 onActivityResult 转发给 callbackManager

4.启用 Chrome 自定义选项卡

将意图筛选条件添加到 manifest 文件,将 fb_login_protocol_scheme 添加到 strings.xml 文件,启用 Chrome 自定义选项卡。启用 Chrome 自定义选项卡时,如果未安装 Facebook 应用,SDK 会在 Chrome 自定义选项卡中展示“登录”对话框,而不是网页视图中。因此,如果用户已在 Chrome 浏览器中登录 Facebook,则无需再次输入凭证。

AndroidManifest.xml 文件添加以下意图筛选条件:

<activityandroid:name="com.facebook.CustomTabActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="@string/fb_login_protocol_scheme" /></intent-filter>
</activity>

strings.xml 文件中添加以下代码:

// if your App ID is 1234567, you should use fb1234567
<string name="fb_login_protocol_scheme">fbAPP_ID</string>

5.检查登录状态

您的应用一次只能登录一个用户,LoginManager 会为该用户设置当前的 AccessTokenProfile。FacebookSDK 会将该数据保存在共享首选项中,并在 SDK 初始化过程中进行设置。您可以通过检查 AccessToken.getCurrentAccessToken() 和 Profile.getCurrentProfile() 来查看用户是否已登录。

获取当前口令

您可以通过 SDK 从缓存或应用书签中(如果应用冷启动)加载 AccessToken.getCurrentAccessToken。您应在 ActivityonCreate 方法中检查它的有效性:

public class MainActivity extends FragmentActivity {CallbackManager callbackManager;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);FacebookSdk.sdkInitialize(getApplicationContext());callbackManager = CallbackManager.Factory.create();LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {...});}

稍后您可以执行实际登录,例如在自定义按钮的 OnClickListener 中:

 LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

最后,在 ActivityonActivityResult 中,将结果传递到 CallbackManager

@Overrideprotected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {super.onActivityResult(requestCode, resultCode, data);callbackManager.onActivityResult(requestCode, resultCode, data);
}

后续步骤

访问口令和个人资料 权限 疑难解答

转载于:https://www.cnblogs.com/android-blogs/p/5896654.html

Android 版 Facebook 登录相关推荐

  1. “小智特惠” Android版已经登录各大电子市场,欢迎试用

    "小智特惠" Android版已经登录各大电子市场,请下载试用,欢迎批评指教 安卓市场下载链接: http://static.apk.hiapk.com/html/2012/11/ ...

  2. Android集成Facebook登录时遇到的问题invalid key hash.the key hash

    一.Facebook:登录功能已停用,我们已停用通过嵌入式浏览器登录Facebook的功能 错误提示: 为保护账户安全,我们已停用通过嵌入式浏览器登录Facebook的功能.若要继续,请更新登录使用的 ...

  3. Android 集成facebook 登录和分享

    ,开场白给大脸书 导入SDK dependencies { compile 'com.facebook.android:facebook-android-sdk:4.15.0' app_id在stri ...

  4. Android——第三方Facebook授权登录获取用户信息

    由于项目中需要使用Facebook进行一键登录,所以记录下步骤,其实小伙伴直接看官网也可以,介绍的蛮详细的,先看下效果图吧. 遵循以下步骤将Facebook登录添加到您的应用. Facebook开发者 ...

  5. Cocos Creator Android 平台 Facebook 原生登录

    在做海外项目中,经常需要接入Facebook SDK ,现将CocosCreator Android 平台 Facebook 登录的接入流程记录下来,以备有需要的朋友做参考. 一.准备工作 1.首先在 ...

  6. Google登录和facebook登录相关

    1:google登录 google登录和Facebook登录都是提供的自定义view按钮: <com.google.android.gms.common.SignInButtonandroid: ...

  7. Android 集成原生google,facebook 登录分享sdk

    前言 海外版app集成三方登录分享,早期采用umeng sdk,由于googleplay对用户隐私及用户数据的使用有比较严格规定.正好 umeng sdk会后台采集app信息,触发用户隐私相关政策条款 ...

  8. Android 实现第三方Facebook登录的具体实现

    前言:因为之前做的项目中需要接入Facebook登录,所以为大家带来Facebook的eclipse版本.在这里简单具体说一下接入的过程中的一些问题和注意的事项,希望为大家解决一些遇到的问题和坑.坑. ...

  9. Android 应用程序集成FaceBook 登录及二次封装

    1.首先在Facebook 开发者平台注册一个账号 https://developers.facebook.com/ 开发者后台  https://developers.facebook.com/ap ...

最新文章

  1. VMware中安装CentOS Linux release 7.4.1708 (Core)
  2. 【Android 内存优化】Bitmap 图像尺寸缩小 ( 考虑像素密度、针对从不同像素密度资源中解码对应的 Bitmap 对象 | inDensity | inTargetDensity )
  3. 半波对称振子方向图_移动天线的概念 | 天线方向性
  4. 模拟ssh, hashlib模块, struct模块, subprocess模块
  5. 计算机专业的口号运动会四字,计算机系运动会口号
  6. sublime3打开多个窗口
  7. Beta 冲刺 (6/7)
  8. ASP.NET的页面生存周期 [转]
  9. JAVA基础知识总结17(网络编程)
  10. 数据分析——人口变化matplotilb绘图
  11. html实现网页多人聊天,实现websocket多人聊天,很简单(示例代码)
  12. 浪漫主义和革命英雄主义的回忆
  13. Github无法访问解决方法
  14. 阿里云服务器,解析二级域名
  15. 迷你播放器--第一阶段(6)--添加搜索定位功能(进阶)-使用filter过滤以及对汉语拼音的排序匹配
  16. java中获取输入的几种方式
  17. 跳一跳——电脑能做的事就不要人工来做啦
  18. joomla数据库表介绍
  19. python3.6中安装xgboost过程及遇到的问题解决
  20. 已服务240多万车主的广汽传祺,引入君子签助力质保服务全程电子化

热门文章

  1. 安装 VMware 15出现的小问题
  2. WPF(四) WPF 模板
  3. 极客班GeekBand - 互联网思维修炼 - 1
  4. 4.4.2 将拉取偏移量作为提交偏移量
  5. 构建基于Zoom的小型会议室应用场景
  6. One-time Password-动态口令
  7. mysql 把时间戳转时间格式_mysql时间戳转成常用可读时间格式的两种方法
  8. 史上最好用的校验【身份证有效期】的JS方法
  9. 2022年的元宇宙,你该知晓些什么?
  10. 25-day24黑马javaweb笔记-redis