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.LoginButton
android: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 fragment
loginButton.setFragment(this);
// Other app specific specialization // Callback registration
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
} @Override
public void onCancel() {
// App code
} @Override
public void onError(FacebookException exception) {
// App code
}
});
}

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

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

public class MainActivity extends FragmentActivity {
CallbackManager callbackManager;
@Override
public 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>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
} @Override
public void onCancel() {
// App code
} @Override
public 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 文件添加以下意图筛选条件:

<activity
android: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;
@Override
public 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

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

Android 版 Facebook 登录的更多相关文章

  1. 利用 JavaScript SDK 部署网页版“Facebook 登录”

    facebook开发者平台https://developers.facebook.com/ 利用 JavaScript SDK 部署网页版“Facebook 登录” 通过采用 Javascript 版 ...

  2. android应用集成facebook登录

      之前都是做国内的应用开发,没有用过国外的三方登录,比如谷歌登录.facebok登录,最近参与了一个海外的支付相关的项目,调研了一下谷歌登录和facebook登录,其实调研之后觉得也是很简单的,尤其 ...

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

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

  4. 在Android上实现使用Facebook登录(基于Facebook SDK 3.5)

    准备工作: 1.       Facebook帐号,国内开发者需要一个vpn帐号(网页可以浏览,手机可以访问) 2.       使用Facebook的SDK做应用需要一个Key Hashes值. 2 ...

  5. Android平台接入Facebook登录

    官方教程地址: https://developers.facebook.com/docs/android/getting-started 开发环境为Android Studio,官方要求SDK最低版本 ...

  6. 【项目记录】-液化气配送app android版

    15年底参与过甲方呼叫中心平台开发.液化气配送app android版要求1个月开发完成.开发此项目以前我只有过一周android的开发经验.(与甲方签署过保密协议,遵循职业道德有些敏感信息不能写.) ...

  7. 开发腾讯移动游戏平台SDK Android版Ane扩展 总结

    本文记录了在开发 腾讯移动游戏平台SDK(MSDK) Android版Ane扩展 过程中所遇到的问题和相关解决方式 问题一:编译报错:Unable to resolve target 'android ...

  8. 支付宝 Android 版使用的开源组件

    支付宝 Android 版使用的开源组件 前言: 花了点时间整理了 支付宝 Android 客户端使用的开源组件,给需要的同学.在你不知道用什么开源框架的时候可以作下参考,毕竟支付宝是阿里的重量级产品 ...

  9. Android版-微信APP支付

    首发地址: Android版-微信APP支付 欢迎留言.转发 微信极速开发系列文章(微信支付.授权获取用户信息等):点击这里 目录 1.注册账号.开发者认证 2.添加应用 3.申请微信支付 4.技术开 ...

随机推荐

  1. [译]如何将docker日志重定向到单个文件里

    原文来源: how-to-redirect-docker-logs-to-a-single-file 问题: 我想把某一个docker的log全部导出到一个文件里进行分析,我该怎么做? 其实不用那样操 ...

  2. js文字效果

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. StringBuilder_学习笔记

    参考:https://www.jianshu.com/p/160c9be0b132 连接符号 "+" 本质 字符串变量(非final修饰)通过 "+" 进行拼接 ...

  4. 【bzoj5017】[Snoi2017]炸弹 线段树优化建图+Tarjan+拓扑排序

    题目描述 在一条直线上有 N 个炸弹,每个炸弹的坐标是 Xi,爆炸半径是 Ri,当一个炸弹爆炸时,如果另一个炸弹所在位置 Xj 满足:  Xi−Ri≤Xj≤Xi+Ri,那么,该炸弹也会被引爆.  现在 ...

  5. [洛谷P4149][IOI2011]Race

    题目大意:给一棵树,每条边有边权.求一条简单路径,权值和等于$K$,且边的数量最小. 题解:点分治,考虑到这是最小值,不满足可减性,于是点分中的更新答案的地方计算重复的部分要做更改,就用一个数组记录前 ...

  6. 深入解析Vuex实战总结

    这篇文章主要介绍了Vuex的初探与实战小结,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. 1.背景 最近在做一个单页面的管理后台项目,为了提高开 ...

  7. 每天一个小算法(Shell Sort1)

    希尔排序是1959 年由D.L.Shell 提出来的,相对直接排序有较大的改进.希尔排序又叫缩小增量排序 基本思想: 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录 ...

  8. js实时监听input中值得变化

    <!DOCTYPE html> <html> <head> <title>zepto</title> <meta name=" ...

  9. ztree 2.0 节点搜索

    最近做了一个简单的功能,树节点的搜索.ztree的版本的2.0,3.X以上的版本请百度解决办法. 1.在setting中增加 function getFontCss(treeId, treeNode) ...

  10. 颜色混合opengl--glBlendFunc函数

    http://www.cnblogs.com/ylwn817/archive/2012/09/07/2675285.html 颜色混合opengl--glBlendFunc函数 原文:http://b ...