我正在使用Google / Facebook社交登录名在我的应用程序中使用FirebaseAuth,并且我们允许用户在首次登录后更改他的电子邮件,因为我们拥有自己的后端用户管理部门,并且会在注册表格中预先填写此电子邮件。
似乎我突然无法从FirebaseUser.getEmail()
方法中检索用户的电子邮件地址。当我尝试使用Facebook / Google登录SDK检索电子邮件时,我可以对其进行检索,因此这不是隐私问题。我的电子邮件已经过验证,因此这也不是问题。
在登录FirebaseAuth后调用AuthResult.getAdditionalUserInfo().getProfile
时,我可以看到email
在地图中。
我已经在此处阅读了一些问题,以便用户无法在Firebase控制台中看到电子邮件,但可以看到所有内容。 Firebase auth SDK的版本为16.1.0
。此行为在我们的iOS应用程序中也可见,因此与Android无关,但仍无法弄清为什么会发生这种情况。 docs说它将在登录时预先填充。
我弄错了吗?还是获取此电子邮件的正确方法是什么,以便我可以用它来预先填充表单?
答案 0 :(得分:1)
使用“每个电子邮件有多个帐户”设置时,非电子邮件(电子邮件/密码或电子邮件链接)帐户的顶级电子邮件user.getEmail()
为空。您可以从user.getProviderData().get(0).getEmail()
列表中获取电子邮件,但前提是提供者存储在索引0中。
这是因为顶级电子邮件是唯一的,并且没有2个帐户可以共享。结果,对于使用该电子邮件创建的任何其他OAuth帐户(如Facebook,Google等),顶级电子邮件为空。
答案 1 :(得分:0)
@Billda
但是我们可以从task.isSuccessful()
方法中获取电子邮件。
只需在firebase的成功任务中使用此代码段即可:
Map profile = task.getResult().getAdditionalUserInfo().getProfile();
Object email = profile.get("email");
尽管我们使用相同的电子邮件表单,但仍从使用中获取电子邮件 Facebook和Google登录帐户。
通过这种方式,您可以获得特定用户的电子邮件
谢谢。您能否清楚地将问题发布到遇到的地方?
因为有很多可能性我们可以将电子邮件设为空。