2016-04-01 78 views
0

我正在開發一款使用Firebase作爲BaaS的應用。無法通過Firebase獲取用戶的gmail電子郵件地址

我已經集成了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(); 
     } 
    } 

該代碼已成功獲取的姓名和個人資料PIC,但它返回null爲電子郵件地址。

請讓我知道這裏發生了什麼問題。

+0

您是否可以仔細檢查用作博客鍵的「email」字符串當你保存到firebase和當你正在提取...? –

+0

@DroidGEEK他沒有從firebase中獲取它,他從google中獲取它 –

+0

Person currentPerson = Plus.PeopleApi .getCurrentPerson(mGoogleApiClient); String 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

下面是谷歌登錄的例子,其中的會議將在瀏覽器關閉時過期,我們也要求擴展電子郵件的權限:

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

當你去到驗證>登錄方法頁面項目在火力地堡控制檯。您有每個電子郵件地址有一個帳戶開或關?如果您爲每個電子郵件地址允許多個帳戶,則對於FirebaseUser您將獲得空值getEmail()

enter image description here

你必須使用的選項: 「阻止創建多個賬戶使用相同的電子郵件地址的」 要不然FirebaseUser.getEmail()將返回null

Ps:只有在該選項關閉後第一次登錄的用戶才能成功使用此方法

相關問題