Не удается получить электронную почту из FirebaseAuthentication на Android / iOS

1

Я использую FirebaseAuth в своем приложении с социальными логинами Google/Facebook, и мы позволяем пользователю изменять свой адрес электронной почты после первого входа в систему, потому что у нас есть свой собственный бэкэнд с управлением пользователями, и мы предварительно заполняем это письмо в регистрационной форме.

Кажется, что вдруг я не могу получить адрес электронной почты пользователя из метода FirebaseUser.getEmail(). Когда я пытаюсь получить электронную почту, используя SDK для входа в Facebook/Google, я могу получить ее, чтобы она не стала проблемой конфиденциальности. Мой адрес электронной почты подтвержден, поэтому это не должно быть проблемой.

Когда я вызываю AuthResult.getAdditionalUserInfo().getProfile после входа в систему FirebaseAuth, я вижу, что email присутствует на карте.

Я прочитал здесь какой-то вопрос о том, что пользователь не мог видеть электронную почту в консоли Firebase, но там все видно. Версия Firebase auth SDK: 16.1.0. Это поведение также видно в нашем приложении для iOS, поэтому оно не может быть связано с Android, но все еще не может понять, почему это происходит. Документы говорят, что он будет предварительно заполнен при входе в систему.

Я правильно понял? Или каким должен быть правильный способ получения этого электронного письма, чтобы я мог предварительно заполнить его формой?

Теги:
firebase
firebase-authentication

2 ответа

1
Лучший ответ

При использовании параметра "несколько учетных записей на одну электронную почту" верхний уровень электронной почты user.getEmail() является нулевым для учетных записей, не относящихся к электронной почте (электронная почта/пароль или ссылка на электронную почту). Вы можете получить электронное письмо из user.getProviderData().get(0).getEmail(), если поставщик хранится в индексе 0.

Это потому, что электронная почта верхнего уровня уникальна, и никакие 2 учетные записи не могут делиться этим. В результате, электронная почта верхнего уровня не имеет значения для любой дополнительной учетной записи OAuth, созданной с помощью этой электронной почты, например, Facebook, Google и т.д.

  • 0
    Приятно. Мне пришлось перебрать все providerData и найти тот, который не имеет пустой электронной почты, но я нашел его там в конце концов. Спасибо!
0

@Billda

Но мы можем получить электронное письмо от task.isSuccessful().

Просто используйте этот фрагмент в задании на успех из базы:

Map profile = task.getResult().getAdditionalUserInfo().getProfile();

Object email = profile.get("email");

Получение электронной почты от использования, хотя мы используем ту же форму электронной почты Facebook и Google, чтобы войти в учетные записи.

Таким образом, вы можете получить электронную почту конкретного пользователя

Спасибо. Можете ли вы опубликовать проблему, с которой столкнулись?

Потому что есть много возможностей, где мы можем получить электронную почту как ноль.

  • 0
    Да, я упомянул в вопросе, что я могу получить электронную почту таким способом, но вы не можете получить доступ к этим данным позже (afaik), например. когда пользователь снова открывает приложение, но не завершил регистрацию, я все еще хочу предварительно заполнить форму, и я хотел бы избежать ее сохранения в другом месте.
  • 0
    Вы не можете получить доступ к данным позже? Вы можете хранить данные, используя sharedPrefernce, пока регистрация не завершится. Я до сих пор не понял, чего вы хотите четко достичь. Не могли бы вы объяснить вкратце?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню