如何在安卓中通过访问令牌获取脸书用户的性别



在 Android Studio 中,使用 facebook SDKGraphRequest和 token,我可以获取帐户信息,除了性别。

这是我尝试过的脚本:

GraphRequest request = GraphRequest.newMeRequest(token, (object, response) -> {
Log.e("fbLoginActivity", object.toString());
String fbId;
String fbEmail;
String fbFirst_name;
String fbLast_name;
String fbBirthday;
String fbGender;
String fbPhoto;
try {
String fbId = object.getString("id");
String fbEmail = object.getString("email");
String fbFirst_name = object.getString("first_name");
String fbLast_name = object.getString("last_name");
String fbBirthday = object.getString("birthday");
String fbGender = object.getString("gender"); // <-- ERROR, but when I comment this line, it works (without gender data)
String fbPhoto = "http://graph.facebook.com/" + fbId + "/picture?type=large";
} catch (JSONException e) {
Toast.makeText(mContext, "fb graph JSONException error", Toast.LENGTH_SHORT).show();
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,first_name,last_name,email,gender,birthday,picture.type(large)");
request.setParameters(parameters);
request.executeAsync();

这是我使用 faceook 登录时的读取权限:

fbLoginManager.logInWithReadPermissions(
LoginActivity.this,
Arrays.asList("email", "public_profile", "user_birthday", "user_photos")
);

问题出在这一行:

String fbGender = object.getString("gender");

所以我检查了object.toString(),实际上 API 中没有输出性别属性:

Log.e("fbLoginActivity", object.toString());

你知道有什么工作方法可以获得Facebook用户的性别吗?

这里似乎没有有用的答案。还好我自己解决了!

问题出在我的读取权限上,我只需要在fbLoginManager.logInWithReadPermissions()调用中添加"user_gender"即可。以前,我虽然性别信息包含在"public_profile"中,但没有。

我的完整读取权限代码:

fbLoginManager.logInWithReadPermissions(
LoginActivity.this,
Arrays.asList("email", "public_profile", "user_birthday", "user_gender", "user_link", "user_photos")
);

现在我的对象具有性别属性,object.toString()结果:

{
"id": // ...
"first_name":"Taufik",
"last_name":"Nur Rahmanda",
"email":"topexgames@yahoo.com",
"gender":"male", // <-- YEAH!
"birthday":"07/26/1993",
// ... etc
}

文档:

https://developers.facebook.com/docs/facebook-login/permissions/v3.0#permissions

Facebook不支持使用Graph API获取性别和真实的Facebook用户ID。

你需要找到其他方法来获取性别,也许你需要一个图书馆来根据名字或其他东西找到性别。

你可以在这里看看这个答案。

最新更新