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 и вот, я смог получить их адреса электронной почты. Жизнь снова хороша.

Другие вопросы по тегам