Я использую FirebaseAuth в своем приложении с социальными логинами Google/Facebook, и мы позволяем пользователю изменять свой адрес электронной почты после первого входа в систему, потому что у нас есть свой собственный бэкэнд с управлением пользователями, и мы предварительно заполняем это письмо в регистрационной форме.
Кажется, что вдруг я не могу получить адрес электронной почты пользователя из метода FirebaseUser.getEmail()
. Когда я пытаюсь получить электронную почту, используя SDK для входа в Facebook/Google, я могу получить ее, чтобы она не стала проблемой конфиденциальности. Мой адрес электронной почты подтвержден, поэтому это не должно быть проблемой.
Когда я вызываю AuthResult.getAdditionalUserInfo().getProfile
после входа в систему FirebaseAuth, я вижу, что email
присутствует на карте.
Я прочитал здесь какой-то вопрос о том, что пользователь не мог видеть электронную почту в консоли Firebase, но там все видно. Версия Firebase auth SDK: 16.1.0
. Это поведение также видно в нашем приложении для iOS, поэтому оно не может быть связано с Android, но все еще не может понять, почему это происходит. Документы говорят, что он будет предварительно заполнен при входе в систему.
Я правильно понял? Или каким должен быть правильный способ получения этого электронного письма, чтобы я мог предварительно заполнить его формой?
При использовании параметра "несколько учетных записей на одну электронную почту" верхний уровень электронной почты user.getEmail()
является нулевым для учетных записей, не относящихся к электронной почте (электронная почта/пароль или ссылка на электронную почту). Вы можете получить электронное письмо из user.getProviderData().get(0).getEmail()
, если поставщик хранится в индексе 0.
Это потому, что электронная почта верхнего уровня уникальна, и никакие 2 учетные записи не могут делиться этим. В результате, электронная почта верхнего уровня не имеет значения для любой дополнительной учетной записи OAuth, созданной с помощью этой электронной почты, например, Facebook, Google и т.д.
@Billda
Но мы можем получить электронное письмо от task.isSuccessful()
.
Просто используйте этот фрагмент в задании на успех из базы:
Map profile = task.getResult().getAdditionalUserInfo().getProfile();
Object email = profile.get("email");
Получение электронной почты от использования, хотя мы используем ту же форму электронной почты Facebook и Google, чтобы войти в учетные записи.
Таким образом, вы можете получить электронную почту конкретного пользователя
Спасибо. Можете ли вы опубликовать проблему, с которой столкнулись?
Потому что есть много возможностей, где мы можем получить электронную почту как ноль.