无法通过Firebase获取用户的Gmail电子邮件地址

时间:2016-04-01 10:12:21

标签: android firebase firebase-authentication

我正在开发一款使用Firebase`作为BaaS的应用。

我已整合Google登录,但我想获取用户名,电子邮件地址和个人资料照片。

我已成功获取名称和个人资料照片,但我无法获取电子邮件地址。

以下是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作为电子邮件地址。

请告诉我这里出了什么问题。

2 个答案:

答案 0 :(得分:3)

不确定是否是你的情况,但是你可以获得其他字段但getEmail返回null的一种情况是在Firebase控制台>身份验证>登录方法您允许"使用相同的电子邮件地址创建多个帐户"

已经向谷歌提交了closed bug report

  

当您转到验证> Firebase控制台中项目的登录方法页面。你有每个电子邮件地址一个帐户打开还是关闭?如果您允许每个电子邮件地址使用多个帐户,则对于FirebaseUser,您将为空 getEmail()

enter image description here

您必须使用以下选项:"使用相同的电子邮件地址防止创建多个帐户"否则 FirebaseUser.getEmail()将返回null

Ps:只有在关闭选项后首次登录的用户才能成功使用此方法

答案 1 :(得分: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