我正在编写一个Facebook Android应用程序,我遇到的一个问题是获取用户的电子邮件地址。对于除一个以外的所有Facebook帐户,电子邮件地址都会抛出异常。这是我的代码:
loginButton = (LoginButton) findViewById(R.id.login_button);
callbackManager = CallbackManager.Factory.create();
loginButton.registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
String accessToken =
loginResult.getAccessToken().getToken();
Log.i("accessToken", accessToken);
GraphRequest request = GraphRequest.newMeRequest
(loginResult.getAccessToken(), new
GraphRequest.GraphJSONObjectCallback()
{
@Override
public void onCompleted(JSONObject object,
GraphResponse response)
{
SharedPreferences.Editor editor =
sharedPref.edit();
try
{
editor.putString("user_ID",
object.getString("id"));
user_ID = object.getString("id");
editor.putString("user_name." +
user_ID, object.isNull("name") ?
"" : object.getString("name"));
editor.putString("email_addr." +
user_ID, object.isNull("email") ?
"" : object.getString("email"));
editor.commit();
}
catch (Exception e)
{
Toast.makeText(LaunchPage.this, getString(R.string.login_error) + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, name, email, gender, birthday, timezone, picture, locale, age_range");
request.setParameters(parameters);
request.executeAsync();
}
我已经花了几天时间解决这个问题,我认为我正在做其他几个解决方案中提出的建议,但我的代码仍然失败。我试图在失败的Facebook帐户中公开我的电子邮件地址,但这没有帮助。
答案 0 :(得分:1)
试试这段代码:
在setReadPermissions
LoginButton
loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList(
"public_profile", "email", "user_birthday", "user_friends"));
还要确保您的Email
在您的Fb帐户中公开。否则Graph api
将不会返回它。
答案 1 :(得分:0)
我突然想到,其电子邮件地址被退回的一个帐户是我自己的,这可能与我是开发人员的事实有关。所以我检查了我的Facebook开发者控制台并发现了一个部分,角色,可以让你识别测试人员。所以我添加了几个我的测试FB ID,看,我能够得到他们的电子邮件地址。生活再好。