Android端Graph API无法获取性别字段,其余用户参数可正常获取
解决Facebook Graph API无法获取性别字段的问题
这种突然失效的情况大概率和请求字段范围、权限配置有关——毕竟昨天还能正常工作,先从这几个核心点排查:
显式指定请求字段是关键
Facebook Graph API默认不会返回所有用户字段,哪怕你有对应权限。你需要在请求里明确把gender加入字段列表,不然就算有权限也拿不到数据。修改你的代码,添加字段参数:GraphRequest request = GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object, GraphResponse response) { Log.v("LoginActivity", response.toString()); try { String id = object.getString("id"); String name = object.getString("name"); String email = object.getString("email"); // 用optString避免字段不存在时抛出异常 String gender = object.optString("gender"); Log.v("LoginActivity", "获取到的性别: " + gender); } catch (JSONException e) { e.printStackTrace(); } } } ); // 必须显式声明要获取的字段 Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,email,gender"); request.setParameters(parameters); request.executeAsync();验证AccessToken的权限是否完整
有可能权限被意外重置,检查当前token是否包含public_profile权限(获取性别需要这个基础权限):AccessToken token = AccessToken.getCurrentAccessToken(); if (token != null) { Set<String> permissions = token.getPermissions(); Log.v("LoginActivity", "当前权限列表: " + permissions.toString()); }如果没有
public_profile,在登录时重新请求权限:LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"));快速检查Facebook开发者后台配置
开发模式下偶尔会出现权限配置异常,登录Facebook开发者后台:- 进入应用的App Review -> Permissions and Features,确认
public_profile处于可用状态 - 检查Settings -> Basic,确保应用仍处于开发模式
- 进入应用的App Review -> Permissions and Features,确认
排查Graph API版本兼容性
如果最近更新了Facebook SDK,可能默认使用了更高版本的Graph API,部分字段规则有变化。可以在请求里指定稳定版本,比如v18.0:request.setGraphPath("/v18.0/me");
先从显式指定字段开始排查,这是最容易被忽略的点,大概率能解决你的问题。
内容的提问来源于stack exchange,提问作者Devrath
相关产品推荐
相关产品推荐

