最近项目新增一个需求:需要收集用户的邮箱信息。但是直接通过GraphRequest.newMeRequest去获取发现返回值为空,通过查阅资料得知facebook获取用户邮箱还需要授权。

授权方式如下

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

获取姓名邮箱信息监听事件如下

 GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {@Overridepublic void onCompleted(JSONObject object, GraphResponse response) {if (object == null) {mPresenter.loginThirdPlat(2,                             loginResult.getAccessToken().getUserId(), nation, information.email);return;}String id = object.optString("id");  String name = object.optString("name"); String gender = object.optString("gender"); String email = object.optString("email"); String locale = object.optString("locale");  //获取用户头像JSONObject object_pic = object.optJSONObject("picture");JSONObject object_data = object_pic.optJSONObject("data");String photo = object_data.optString("url");getFacebookUserPictureAsync(id, new FaceUserImgCallBack() {@Overridepublic void onFailed(String msg) {LogUtil.v("fb", msg)}@Overridepublic void onCompleted(String url) {LogUtil.v("fb", url);}});}});Bundle parameters = new Bundle();parameters.putString("fields", "id,name,email,link,gender,birthday,picture,locale,updated_time,timezone,age_range,first_name,last_name");request.setParameters(parameters);request.executeAsync();

注意需要先注册监听事件,然后需要获取信息时再去执行授权代。

通过上述方式可以获取到头像信息,不过给的是默认大小的图片地址,如果需要自定义大小的头像地址需要通过如下方式去获取:

  /*** 通过facebook的userId,联网异步获取用户的头像url** @param facebookUserId*/public static void getFacebookUserPictureAsync(String facebookUserId, FaceUserImgCallBack callback) {LogUtil.i("fb", "准备获取用户头像");if (facebookUserId == null || facebookUserId.length() == 0) return;Bundle parameters = new Bundle();parameters.putBoolean("redirect", false);parameters.putString("height", "500");parameters.putString("type", "normal");parameters.putString("width", "500");GraphRequest graphRequest = new GraphRequest(AccessToken.getCurrentAccessToken(), "/" + facebookUserId + "/picture", parameters, HttpMethod.GET, new GraphRequest.Callback() {public void onCompleted(GraphResponse response) {if (response == null) {callback.onFailed("facebook failed");return;}if (response.getError() != null) {FacebookRequestError facebookRequestError = response.getError();callback.onFailed("facebook failed:" + facebookRequestError.getErrorMessage());return;}JSONObject responseJsonObject = response.getJSONObject();if (responseJsonObject == null) {callback.onFailed("facebook failed");return;}LogUtil.i("fb", "facebook直接返回的头像信息是" + responseJsonObject.toString());String avatarUrl = "";try {JSONObject dataJsonObject = responseJsonObject.getJSONObject("data");avatarUrl = dataJsonObject.getString("url");
//                    avatarUrl = URLEncoder.encode(avatarUrl, "UTF-8");LogUtil.i("fb", "用户头像获取完毕 avatarUrl:" + avatarUrl);} catch (Exception e) {callback.onFailed("facebook failed" + e.getStackTrace().toString());}callback.onCompleted(avatarUrl);}});LogUtil.i("fb", "version:" + graphRequest.getVersion() + "");graphRequest.executeAsync();}public interface FaceUserImgCallBack {void onFailed(String msg);void onCompleted(String url);}

如此便可以轻松获取facebook相关个人信息

FaceBook第三方登录获取姓名,头像,邮箱等个人信息相关推荐

  1. 用 Flask 来写个轻博客 (23) — 应用 OAuth 来实现 Facebook 第三方登录

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 第三方登录流程 OAuth 应用 OAuth 实现 Face ...

  2. Java实现Facebook第三方登录

    第一次接触Facebook第三方登录,可能有些地方做的并不全面,只是尝试着做了一个小demo,因为国内接入Facebook的项目并不多,并且多数都是Android或IOS的实现,所以资料也特别少,在此 ...

  3. facebook第三方登录前后端分离

    facebook第三方登录三种实现方式:第三种我认为方便简单 1.js sdk 直接在官网看文档 直接调用他的sdk 官网:https://developers.facebook.com/docs/f ...

  4. Facebook第三方登录流程总结

    Facebook第三方登录流程总结 授权Facebook第三方登录流程 开发步骤 Facebook应用配置 前端授权 后端校验 授权Facebook第三方登录流程 有时候为了迅速获客,会在注册登录页支 ...

  5. 详细前后端分离实现facebook第三方登录的全过程(国内一般都是用Android和ios,并且资料稀少)

    实现facebook第三方登录全过程 需求 官方文档与校验工具 详细步骤 1.注册一个facebook的账号 2.登录https://developers.facebook.com/ 3.点击我的应用 ...

  6. 微信小程序——按钮登录获取用户头像昵称、不需要获取权限就能显示头像和昵称、获取手机号(云端)

    1.登录获取用户头像昵称 代码 app.js App({globalData: {userInfo: null},onLaunch() {} }) . . . index.js const app = ...

  7. 分别嵌入 新浪微博、QQ、微信 做第三方授权登录 获取到头像 昵称等信息

    下面提到的这三种 授权登录 是分别嵌入,不是 share sdk 或者友盟 其它的. 一.下载sdk 地址 1.新浪微博 新浪微博SDK 下载 2.QQ  QQ SDK 下载 3.微信 微信SDK 二 ...

  8. Facebook第三方登录对接

    一.背景调研 1.什么是第三方登录? 第三方登录是基于用户在第三方平台上已有的账号和密码来快速完成己方应用的登录或者注册的功能.而这里的第三方平台,一般是已经拥有大量用户的平台,国外的比如Facebo ...

  9. Android 实现 Facebook 第三方登录

    Facebook 的 Android 登录链接,其中包含了很多账号注册信息.这里贴出一些 facebook 登录中重点的代码,申请的 App 相关信息这里就不多介绍,Facebook 此网页支持中文. ...

  10. iOS Facebook第三方登录

    由于当前项目需要有facebook和google的第三方登录,所以简单整理了一下相关流程,今天主要说一下facebook的第三方登录以及注意的地方. 总结 1.申请facebook账号 2.创建应用 ...

最新文章

  1. matlab与acess连接问题
  2. linux操作系统教学,Linux操作系统教学视频
  3. vr降噪器英文是什么_CR渲染器和VR渲染器在3d效果图上的区别
  4. linux设备驱动模型之 kset原理与实例分析
  5. 四十二、深入Java中的文件读取操作
  6. Android应用程序之间共享文字和图片(一)
  7. 怎么利用GitHub
  8. connectionstring mysql_Entity Framework 6 自定义连接字符串ConnectionString连接MySQL
  9. BugkuCTF-MISC题简单套娃
  10. python-列表包字典-根据字典的某一个键的值来进行排序
  11. 剖析 epoll ET/LT 触发方式的性能差异误解(定性分析)
  12. 【Nodejs】npm cnpm 淘宝镜像
  13. Spring_day3
  14. python编程是啥-什么是少儿Python编程?这一篇就够啦!
  15. oracle 表或视图不存在
  16. c语言java异或区别_C、C++、Java异或运算交换变量变量值的区别
  17. 【问题记录】怎么用python读取CIFAR10数据集?
  18. 从飞猪智能酒店到优酷视频,探索阿里智能研发协同流程
  19. centos设置东八区
  20. 欧姆龙485通讯示例程序_欧姆龙PLC型号大全

热门文章

  1. python金山词霸单词本批量导入
  2. 调制解调器和路由器的区别:
  3. 手把手教你找回学信网原来的登记手机号码
  4. 向量交点坐标公式_直线的交点坐标与距离公式
  5. xp仿ios主题_三合一xp仿苹果电脑桌面主题
  6. 几何之父欧几里得的故事
  7. 什么是显示器的分区背光?侧入式背光与直下式背光有什么区别?什么是Mini LED背光?Micro LED又是什么?
  8. android offtime编程,OFFTIME - 做功课就憋玩手机了! - Android 应用 - iPad - 【最美应用】...
  9. C1083:无法打开源文件
  10. python考试分几级_全国计算机等级考试2级分几类?到底怎么考啊?