Android 版 Facebook 登录
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 应用。
B. 创建开发者帐户
如果没有 Facebook 开发者帐户,请点击下面的按钮创建。您可以通过 Facebook 开发者帐户使用开发者工具和创建 Facebook 应用。
C. 下载 Android SDK
下载最新的 Android 版 Facebook SDK。
D. 获得 Facebook 应用编号、添加 SDK、以及向资料页添加密钥散列
点击下方的按钮,按照快速入门操作,也可以按照新手入门中的步骤操作。
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() 方法中注册一个回调。
您可以自定义的属性包括 LoginBehavior、DefaultAudience、ToolTipPopup.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.注册回调
为了响应登录结果,您需要使用 LoginManager 或 LoginButton 注册回调。如果您使用 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 会为该用户设置当前的 AccessToken 和 Profile。FacebookSDK 会将该数据保存在共享首选项中,并在 SDK 初始化过程中进行设置。您可以通过检查 AccessToken.getCurrentAccessToken() 和 Profile.getCurrentProfile() 来查看用户是否已登录。
获取当前口令
您可以通过 SDK 从缓存或应用书签中(如果应用冷启动)加载 AccessToken.getCurrentAccessToken。您应在 Activity 的 onCreate 方法中检查它的有效性:
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"));
最后,在 Activity 的 onActivityResult 中,将结果传递到 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 登录的更多相关文章
- 利用 JavaScript SDK 部署网页版“Facebook 登录”
facebook开发者平台https://developers.facebook.com/ 利用 JavaScript SDK 部署网页版“Facebook 登录” 通过采用 Javascript 版 ...
- android应用集成facebook登录
之前都是做国内的应用开发,没有用过国外的三方登录,比如谷歌登录.facebok登录,最近参与了一个海外的支付相关的项目,调研了一下谷歌登录和facebook登录,其实调研之后觉得也是很简单的,尤其 ...
- Android 应用程序集成FaceBook 登录及二次封装
1.首先在Facebook 开发者平台注册一个账号 https://developers.facebook.com/ 开发者后台 https://developers.facebook.com/ap ...
- 在Android上实现使用Facebook登录(基于Facebook SDK 3.5)
准备工作: 1. Facebook帐号,国内开发者需要一个vpn帐号(网页可以浏览,手机可以访问) 2. 使用Facebook的SDK做应用需要一个Key Hashes值. 2 ...
- Android平台接入Facebook登录
官方教程地址: https://developers.facebook.com/docs/android/getting-started 开发环境为Android Studio,官方要求SDK最低版本 ...
- 【项目记录】-液化气配送app android版
15年底参与过甲方呼叫中心平台开发.液化气配送app android版要求1个月开发完成.开发此项目以前我只有过一周android的开发经验.(与甲方签署过保密协议,遵循职业道德有些敏感信息不能写.) ...
- 开发腾讯移动游戏平台SDK Android版Ane扩展 总结
本文记录了在开发 腾讯移动游戏平台SDK(MSDK) Android版Ane扩展 过程中所遇到的问题和相关解决方式 问题一:编译报错:Unable to resolve target 'android ...
- 支付宝 Android 版使用的开源组件
支付宝 Android 版使用的开源组件 前言: 花了点时间整理了 支付宝 Android 客户端使用的开源组件,给需要的同学.在你不知道用什么开源框架的时候可以作下参考,毕竟支付宝是阿里的重量级产品 ...
- Android版-微信APP支付
首发地址: Android版-微信APP支付 欢迎留言.转发 微信极速开发系列文章(微信支付.授权获取用户信息等):点击这里 目录 1.注册账号.开发者认证 2.添加应用 3.申请微信支付 4.技术开 ...
随机推荐
- vue.$refs 的用法
官网给出的解释是: 被用来给元素或子组件注册引用信息.引用信息将会注册在父组件的 $refs 对象上. 1.如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素; 2.如果用在子组件上,引用 ...
- 简单的FreeBSD 的内核编译
简单的FreeBSD 的内核编译 删除并重新下载内核源码 删除自带的内核源码rm -rf /usr/src 下载内核源码wget https://download.freebsd.org/ftp/re ...
- 【BZOJ 4057 Kingdoms】
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 450 Solved: 187[Submit][Status][Discuss] Descriptio ...
- HTML,CSS,font-family:中文字体的英文名称【转载】
转自:http://www.9958.pw/post/html_font-family 宋体 SimSun 黑体 SimHei 微软雅黑 Microsoft YaHei 微软正黑体 Microsoft ...
- 【转】IDEA 2017破解 license server激活
确保电脑在联网状态,在激活窗口选择license server 填入下面的license server: http://intellij.mandroid.cn/ http://idea.imsxm. ...
- 一种有效的压缩感知方法——读Levin论文笔记
原文链接:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.122.2942&rep=rep1&type=pdf 1 基 ...
- Java基础语法实例(1)——实习第一天
来到广州实习的第一天,我选择的是JavaEE,因为以后的方向是Java,所以就选择了它.感觉有一段时间没有接触Java了.趁此机会好好努力,将基础巩固好. Java输入及循环,判断,字符转换,数组定义 ...
- bzoj1861 [Zjoi2006]Book 书架 splay
小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下一本.由于这些书太有吸引 ...
- box-pack
box-pack表示父容器里面子容器的水平对齐方式,可选参数如下所示: start | end | center | justify <article class="wrap" ...
- Springboot+Redis序列化坑
今天在测试springboot整合redis的时候遇到下面这个坑,百度来百度去发现提示都是ajax的问题,真的是醉了,错误提示如下所示,不信大家可以直接复制百度一下答案是什么(流泪中....),错误如 ...