Не удалось получить адрес электронной почты Gmail пользователя через Firebase

Я разрабатываю приложение, которое использует Firebase в качестве BaaS.

Я интегрировал Google Sign-in и хочу получить имя пользователя, адрес электронной почты и изображение профиля.

Я успешно получил имя и фото профиля, но не могу получить адрес электронной почты.

Вот настройка клиента Google API:

/* Setup the Google API object to allow Google+ logins */
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(Plus.API)
                .addScope(Plus.SCOPE_PLUS_LOGIN)
                .build();

Вот что я сделал для получения данных пользователя:

public void fetchDataFromGoogle() {

        if (authData != null) {
            if (authData.getProvider().equals("google")) {

                googleName = (String) authData.getProviderData().get("displayName");
                googleEmail = (String) authData.getProviderData().get("email");
                googleImage = (String) authData.getProviderData().get("profileImageURL");

            }
        } else {
            Toast.makeText(getBaseContext(), "error", Toast.LENGTH_LONG).show();
        }
    }

Этот код успешно извлек имя и изображение профиля, но возвращает null для адреса электронной почты.

Пожалуйста, дайте мне знать, что здесь происходит.


person Hammad Nasir    schedule 01.04.2016    source источник
comment
Можете ли вы дважды проверить строку электронной почты, используемую в качестве ключа, как при сохранении в firebase, так и при ее извлечении...?   -  person Droid GEEK    schedule 01.04.2016
comment
@DroidGEEK он не получает его из firebase, он получает его из Google   -  person    schedule 01.04.2016
comment
Person currentPerson = Plus.PeopleApi .getCurrentPerson(mGoogleApiClient); Строка personName = currentPerson.getDisplayName(); Строка personPhotoUrl = currentPerson.getImage().getUrl(); Строка personGooglePlusProfile = currentPerson.getUrl(); Строка электронной почты = Plus.AccountApi.getAccountName(mGoogleApiClient); как я его достаю...   -  person Droid GEEK    schedule 01.04.2016


Ответы (2)


Не уверен, что это ваш случай, но одна ситуация, когда вы можете получить другие поля, но getEmail возвращает значение null, - это когда в консоли Firebase> Аутентификация> Методы входа вы разрешаете «создание нескольких учетных записей с одним и тем же адресом электронной почты»

В Google уже отправлен закрытый отчет об ошибке:

При переходе на страницу Аутентификация > Методы входа вашего проекта в консоли Firebase. включена или выключена функция Одна учетная запись на адрес электронной почты? Если вы разрешите несколько учетных записей для одного адреса электронной почты, вы получите null для FirebaseUser.getEmail()

введите здесь описание изображения

Вы должны использовать параметр: «Запретить создание нескольких учетных записей с одним и тем же адресом электронной почты», иначе FirebaseUser.getEmail() вернет значение null

Ps: только пользователи, впервые вошедшие в систему после отключения опции, смогут успешно использовать этот метод.

person HenriqueMS    schedule 02.06.2017

Вам также потребуется запросить область действия email. Из документации Firebase по аутентификации Google:

Вот пример входа в Google, когда срок действия сеанса истекает после закрытия браузера, и мы также запрашиваем расширенное разрешение электронной почты:

var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.authWithOAuthPopup("google", function(error, authData) { /* Your Code */ }, {
  remember: "sessionOnly",
  scope: "email"
});

См. также мой ответ: Firebase и новый вход в Google на Android< /а>

person Frank van Puffelen    schedule 01.04.2016