Facebook登录

一、目录

一、开始配置

  1. Facebook Developers面板创建应用和基本配置
  2. 集成Facebook SDK 或者 使用依赖配置(二选一即可)
  3. 编辑资源和清单
  4. 开发秘钥散列的获取和配置

二、开始使用

  1. 标识应用事件(非必须)
  2. 添加登录按钮
  3. 注册登录回调 && 使用登录功能

三、额外功能

  1. 获取用户基本信息
  2. 获取用户好友信息
  3. 检查登录状态
  4. 退出注销登录

==================================================================================================

二、开始配置

一、Facebook Developers面板创建应用和基本配置

1. 地址:Facebook登录集成控制台

二、 集成Facebook SDK 或者 使用依赖配置(二选一即可,下面例子采取Gradle依赖)

   1. project的build.gradle里加入jcenter仓库buildscript {repositories {jcenter() }}2. app的build.gradle里依赖配置implementation 'com.facebook.android:facebook-login:[5,6)'

三、 编辑资源和清单

1.在strings.xml添加

 <string name="facebook_app_id">配置APP_ID</string> <string name="fb_login_protocol_scheme">fb + APP_ID</string>

2.在AndroidManifest.xml里添加

 //1. 访问网络权限<uses-permission android:name="android.permission.INTERNET"/>//2. meta-data<meta-dataandroid:name="com.facebook.sdk.ApplicationId"android:value="@string/facebook_app_id" />//3. Activity<activityandroid:name="com.facebook.FacebookActivity"android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"android:label="@string/app_name" /><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>

四、开发秘钥散列的获取和配置

1. 关联包名和Facebook登录的启动页: 在Facebook Developers快速开始的 >>> 5.为应用提供开发和发布密钥散列
        2. 生成出来的散列秘钥配置: 在Facebook Developers快速开始的 >>> 6.为应用提供开发和发布密钥散列

 // 官方提供了代码获取, 就是根据应用签名生成的(所以需要注意debug包生成的和release包生成的不一样,正式上线后重新用release包生成一个,当然如果签名一样就不影响了)public static String getHashKey(Context context){try {PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);for (android.content.pm.Signature signature : info.signatures) {MessageDigest md = MessageDigest.getInstance("SHA");md.update(signature.toByteArray());String KeyHash = Base64.encodeToString(md.digest(), Base64.DEFAULT);Log.e("HashKey=========", KeyHash);// 打印出来的HashKey就是秘钥散列return KeyHash;}} catch (Exception e) {return "获取异常";}return null;
}

====================================================================================================

三、开始使用

一、标识应用事件(非必须)

1. 作用: 分析了解用户激活应用的频率、使用应用的时长,查看其他人口统计数据等功能使用
         2. 使用: 在application里注册

    // 可以不使用FacebookSdk.sdkInitialize(getApplicationContext());AppEventsLogger.activateApp(this);

二、添加登录按钮

关于区别了解请移步我另外一篇: Facebook登录自定义按钮

方式一: 使用Facebook自定义LoginButton
 // 在xml里使用按钮<com.facebook.login.widget.LoginButtonandroid:id="@+id/login_button"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="60dp"/>
方式二: 使用自定义view点击按钮
 // 自定义按钮无非就是多了一行调用登录api的代码LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile"));

三、注册登录回调 && 使用登录功能

1. 在登录页里注册登录的回调

 callbackManager = CallbackManager.Factory.create();LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback<LoginResult>() {@Overridepublic void onSuccess(LoginResult loginResult) {// TODO 成功后的操作Toast.makeText(MainActivity.this, "登录成功", 0).show();}@Overridepublic void onCancel() {// TODO 取消登录Toast.makeText(MainActivity.this, "取消登录", 0).show();}@Overridepublic void onError(FacebookException exception) {// TODO 登录失败Toast.makeText(MainActivity.this, "登录失败", 0).show();}});
  1. 在登录页覆写的onActivityResult方法里回调登录的结果,这样manager里才能随时拿到最新的用户状态

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

===================================================================================================

四、额外功能

一、获取用户基本信息

用户基本信息获取有两种方式: AccessTokenTracker 、 ProfileTracker 、GraphRequest.newMeRequest
如果只需要id和token用第一个;如果需要id、姓名、头像用第二个;如果需要完整的用户信息用第三个

  1. AccessTokenTracker 里能拿到的信息非常有限,通过token能拿到fbIDfbToken
  2. ProfileTracker 类存储了用户最基本的配置信息,被封装在Profile类里,
    包括idfirstNamemiddleNamelastNamenamelinkUri
  3. GraphRequest类 是一个专用请求序列化数据的类,里面有两个非常重要的静态方法:
    需要这些信息的前提是,在登录前向用户申请权限
  1. newPostRequest:可以拿到用户的基本信息,包括姓名fbID性别头像生日
  2. newMyFriendsRequest:可以拿到用户的好友列表
方式一:使用AccessTokenTracker
accessTokenTracker = new AccessTokenTracker() {@Overrideprotected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {// Set the access token using }
};
方式二:使用ProfileTracker
 /*** 获取用户facebook profile*/
String fbName = null;
String fbId   = null;private void GetUserFacebookProfile(final AccessToken accessToken) {Profile profile = Profile.getCurrentProfile();if (profile == null) {mProfileTracker = new ProfileTracker() {@Overrideprotected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {if (currentProfile != null) {fbName = currentProfile.getName();fbId = currentProfile.getId();LoginResultTrans(new FacebookUserInfoBean(fbId, fbName, accessToken.getToken()));/*Log.e(Constant.println.fragmentTag, "\n新建profile用户信息=====profile.toString());*/}mProfileTracker.stopTracking();}};mProfileTracker.startTracking();} else {fbName = profile.getName();fbId = profile.getId();LoginResultTrans(new FacebookUserInfoBean(fbId, fbName, accessToken.getToken()));/* Log.e(Constant.println.fragmentTag, "\n已存在profile用户信息===== profile.toString());*/}
}
方式三: 使用GraphRequest.newMeRequest
    // 用户信息批处理GraphRequest meRequest = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {@Overridepublic void onCompleted(JSONObject object, GraphResponse response) {if (response.getError() != null) {String connection = response.getError().toString();String errorMessage = response.getError().getErrorMessage();Log.e(Constant.println.fragmentTag, "获取用户个人信息错误: " + connection + "        错误信息 =====" + errorMessage);} else {// code == 200if (object != null) {// 用户信息Log.e(Constant.println.fragmentTag, "Response===" + response.toString());}}}});

二、获取用户好友信息

    // 用户好友批处理GraphRequest myFriendRequest = GraphRequest.newMyFriendsRequest(accessToken, new GraphRequest.GraphJSONArrayCallback() {@Overridepublic void onCompleted(JSONArray jsonArray, GraphResponse response) {// Application code for users friendsif (response.getError() != null) {String connection   = response.getError().toString();String errorMessage = response.getError().getErrorMessage();Log.e(Constant.println.fragmentTag, "获取用户好友信息错误: " + connection + "        错误信息 =====" + errorMessage);}// 用户好友信息if (jsonArray != null) {// TODO: 2019/7/25Log.e(Constant.println.fragmentTag, "用户好友信息: " + jsonArray.toString());}}});Bundle parameters = new Bundle();parameters.putString("fields", "public_profile,id,email,locale,location,user_gender,ser_birthday,user_friends");myFriendRequest.setParameters(parameters);GraphRequestBatch requestBatch = new GraphRequestBatch(myFriendRequest);// 可以同时执行多个请求requestBatch.executeAsync();

三、检查登录状态

 // 通过判断当前token是否有效,来确定是否已经登录AccessToken accessToken = AccessToken.getCurrentAccessToken();Booble isLoggedIn = accessToken != null && !accessToken .isExpired();if (!isLoggedIn ) {// 未登录}else {// 已自动登录}

四、退出注销登录

LoginManager.getInstance().logOut();// 注销登录

至此,就结束了,有疑惑的地方可以评论询问,有错误的地方望指正!谢谢!

Android Facebook登录,进来看就对了相关推荐

  1. Android FaceBook登录问题记录

    虽然按照官方文档 Facebook 登录 一步一步集成,但测试的时候还是遇到了问题,在这里记录一下.希望给其他出现相同问题的朋友一些借鉴. 问题1 提示没有权限,该账号不是测试账号 解决 在你申请的应 ...

  2. Android FaceBook登录接入--散列密钥获取

    官方提供的方法如下: /*** 根据签名文件获取散列密钥* 注意: 如果debug和release签名文件不一致,需要重新生成配置到Facebook*/public static String get ...

  3. Android Facebook登录的简单实现

    1.下载sdk并在facebook开发者平台配置 https://developers.facebook.com/docs/android?locale=zh_CN 2.主要功能代码的实现: priv ...

  4. Android FaceBook登录 分享获取HashKey(密钥散列)的简单方法

    1.代码执行获取密钥散列: try {PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageMa ...

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

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

  6. (unity)新手接入Facebook登录,分享以及google登录,Android,IOS,OC接入篇

    最近接Android,IOS的Facebook登录,分享 以及Google登录,分享流程以及遇到的问题整理. 一. Android接入 google登录 第一步,前往 [ firebase] http ...

  7. Android facebook VK 登录与分享 开源SDK

    自己封好的SDK 直接调用 就可以登录 包含facebook VK 登录分享 首先导入SDK 在项目gradle 添加FB,VK的引用 如果你不需要修改源码 直接导入arr文件 比较方便 reposi ...

  8. Android平台接入Facebook登录

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

  9. Facebook android 第三方登录

    Facebook android 第三方登录 android平台使用Facebook账号登录自己的app - 前期准备 - 注册Facebook开发者账号,添加自己的应用,按照官方文档的指引完成需要的 ...

最新文章

  1. Linux之父盟友分道扬镳 直言开源模式软肋
  2. Win7下用VS2010编译QGIS2.9.0
  3. MTK 快速开机 技术详解
  4. mysql 慢查询sql实例_Mysql sql慢查询监控脚本代码实例
  5. Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
  6. shiro +spring + spring mvc+ mybatis整合【转】
  7. 一个拥有12年SAP CRM WebClient UI开发经验的开发人员的分享
  8. 不同matlab版本所支持的gcc g+版本
  9. informix 数据库锁表分析和解决方法
  10. HTTrack 网站备份工具
  11. STS热部署,springboot项目中修改代码不用重新启动服务
  12. IntelliJ IDEA搭建Hadoop开发环境(上)
  13. 信息与计算机科学二级学科,《信息计算与智能系统》二级学科 硕士研究生培养方案...
  14. Ansible主机清单—inventory主机清单
  15. 华为太极magisk安装教程_怎么升级Magisk到最新19.4版本-正确刷入Magisk,获取ROOT教程...
  16. 智能安全辅助驾驶系统 STM32——MQ3酒精传感器的应用(HAL库)
  17. 安卓版按键精灵内存读取游戏人物的坐标详细教程
  18. echarts绘制节点关系图
  19. xctf 实时数据监测
  20. 32位PCI转CPCI转接板

热门文章

  1. Altera FPGA 储存单元IP核之RAM、FIFO
  2. POJ 3585 Accumulation Degree 树形dp
  3. 不懂技术,自己如何做网站?
  4. 第四课 尚硅谷Scala语言学习-面向对象
  5. 计算机促销策划方案,电脑促销活动方案 2017暑假电脑促销活动方案
  6. 看看咱是如何用MATLAB白嫖遥遥领先于同行的神仙级翻译工具 — DeepL
  7. 贪心算法 | 最优装载问题——加勒比海盗船
  8. File System | Debug | 如何查看文件挂载的分区以及分区大小
  9. 谈人生理想与个人实现
  10. golang框架gin的日志处理和zap lumberjack日志使用