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

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

授权方式如下

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

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

 GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public 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() {
                    @Override
                    public void onFailed(String msg) {
                        LogUtil.v("fb", msg)
                    }

                    @Override
                    public 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相关个人信息

Vivado2023是一款集成开发环境软件,用于设计和验证FPGA(现场可编程门阵列)和可编程逻辑器件。对于使用Vivado2023的用户来说,license是必不可少的。 Vivado2023的license是一种许可证,用于授权用户合法使用该软件。许可证分为多种类型,包括评估许可证、开发许可证和节点许可证等。每种许可证都有不同的使用条件和功能。 评估许可证是免费提供的,让用户可以在一段时间内试用Vivado2023的全部功能。用户可以使用这个许可证来了解软件的性能和特点,对于初学者和小规模项目来说是一个很好的选择。但是,使用评估许可证的用户在使用期限过后需要购买正式的许可证才能继续使用软件。 开发许可证是付费的,可以永久使用Vivado2023的全部功能。这种许可证适用于需要长期使用Vivado2023进行开发的用户,通常是专业的FPGA设计师或工程师。购买开发许可证可以享受Vivado2023的技术支持和更新服务,确保软件始终保持最新的版本和功能。 节点许可证是用于多设备或分布式设计的许可证,可以在多个计算机上安装Vivado2023,并共享使用。节点许可证适用于大规模项目或需要多个处理节点进行设计的用户,可以提高工作效率和资源利用率。 总之,Vivado2023 license是用户在使用Vivado2023时必须考虑的问题。用户可以根据自己的需求选择合适的许可证类型,以便获取最佳的软件使用体验。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值