Android中如何通过Access Token获取Facebook用户性别?
解决Facebook GraphRequest无法获取性别字段的问题
你的问题核心是权限配置不匹配加上Facebook Graph API的版本变更限制导致的,下面给你一步步的可行解决方案:
1. 补充user_gender读取权限
从Facebook Graph API v2.12开始,gender字段不再包含在public_profile权限的默认返回内容里,你需要明确申请user_gender权限才能获取这个字段。修改你的登录权限代码:
fbLoginManager.logInWithReadPermissions( LoginActivity.this, Arrays.asList("email", "public_profile", "user_birthday", "user_photos", "user_gender") );
2. 确保Graph API请求参数与SDK版本兼容
你已经在请求参数里指定了gender字段,这部分是正确的,但建议使用v13.0及以上版本的Facebook SDK,避免旧版本的兼容性问题。
3. 做容错处理适配用户隐私设置
即使你申请了正确的权限,也可能因为用户在Facebook账号的隐私设置里把性别设为仅自己可见,导致API无法返回该字段。建议把getString()替换为optString(),避免字段缺失时抛出异常:
try { String fbId = object.getString("id"); String fbEmail = object.optString("email"); String fbFirst_name = object.getString("first_name"); String fbLast_name = object.getString("last_name"); String fbBirthday = object.optString("birthday"); String fbGender = object.optString("gender"); // 字段不存在时返回空字符串,不会抛异常 String fbPhoto = "http://graph.facebook.com/" + fbId + "/picture?type=large"; } catch (JSONException e) { Toast.makeText(mContext, "fb graph JSONException error", Toast.LENGTH_SHORT).show(); }
4. 验证权限是否成功授权
可以在登录成功后检查当前token的权限列表,确认user_gender是否被用户授权:
AccessToken token = AccessToken.getCurrentAccessToken(); if (token != null && token.getPermissions().contains("user_gender")) { // 权限已获取,可正常发起GraphRequest } else { // 提示用户需要授权性别权限才能获取相关信息 }
另外要注意,Facebook的权限政策可能会更新,确保你在Facebook开发者后台的应用设置里,已经正确配置了所需权限,并且符合平台的数据使用规范。
内容的提问来源于stack exchange,提问作者Taufik Nur Rahmanda
相关产品推荐
相关产品推荐

