2016-04-01 2 views
0

Я разрабатываю приложение, использующее Firebase` как BaaS.Не удалось получить адрес электронной почты пользователя gmail через Firebase

У меня есть встроенная учетная запись Google, и я хочу получить имя пользователя, адрес электронной почты и профиль pic.

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

Вот 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 для адреса электронной почты.

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

+0

Можете ли вы дважды проверить строку «email», используемую в качестве ключа на bo й, когда вы спасаете базу огня и когда вы ее извлекаете ...? –

+0

@DroidGEEK он не получает его от firebase, он извлекает его из google –

+0

Person currentPerson = Plus.PeopleApi .getCurrentPerson (mGoogleApiClient); Строка personName = currentPerson.GetDisplayName(); String personPhotoUrl = currentPerson.getImage(). GetUrl(); String personGooglePlusProfile = currentPerson.getUrl(); String email = Plus.AccountApi.getAccountName (mGoogleApiClient); его как я его получаю ... –

ответ

0

Вам необходимо также запросить область email. Из Firebase documentation for Google authentication:

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

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

Смотрите также мой ответ есть: Firebase and new Google Sign-In on Android

1

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

Там в closed bug report уже подали с Google:

Когда вы идете в Auth> Sign-In Methods страницу вашего проекта в Firebase консоли. у вас есть Один аккаунт на адрес электронной почты вкл. или выкл.? Если вы разрешите несколько учетных записей на адрес электронной почты, , вы получите нуль для FirebaseUser. getEmail()

enter image description here

Вы должны использовать опцию: "создание Предотвратить нескольких учетных записей с тем же адресом электронной почты" или еще FirebaseUser.getEmail() возвращает нуль

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

Смежные вопросы