Facebook выдает JSONException при получении значения электронной почты
Я пишу приложение для Android на Facebook, и одна из проблем, с которыми я сталкиваюсь, это получение адресов электронной почты пользователей. Для всех учетных записей 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, но это не помогло.
2 ответа
Попробуйте этот код:
добавлять setReadPermissions
в вашем LoginButton
loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList(
"public_profile", "email", "user_birthday", "user_friends"));
Также убедитесь, что ваш Email
является общедоступным в вашей учетной записи Fb. Иначе Graph api
не вернет его.
Мне вдруг пришло в голову, что одна учетная запись, чей адрес электронной почты возвращается, является моей собственной, и, возможно, это было связано с тем, что я разработчик. Поэтому я проверил свою консоль Facebook Developer Console и обнаружил раздел "Роли", который позволяет идентифицировать тестировщиков. Поэтому я добавил пару своих тестовых идентификаторов FB и вот, я смог получить их адреса электронной почты. Жизнь снова хороша.