2016-04-01 18 views
0

私はBaaSとしてFirebaseを使用するアプリを開発しています。Firebase経由でユーザーのGmailメールアドレスを取得できません

私はGoogle Sign-inを統合しており、ユーザーの名前、メールアドレス、プロフィールを取得したいと考えています。

名前とプロフィールの画像を正常に取得しましたが、メールアドレスを取得できません。ここで

では、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を返します電子メールアドレス。

ここで何が問題になっているか教えてください。

+0

boのキーとして使用される「電子メール」文字列を再確認できますか?火元に保存しているとき、それをフェッチしているときは...? –

+0

@DroidGEEK彼はfirebaseからフェッチしていないので、Google –

+0

からフェッチしています。人currentPerson = Plus.PeopleApi .getCurrentPerson(mGoogleApiClient); 文字列personName = currentPerson。getDisplayName(); 文字personPhotoUrl = currentPerson.getImage()。getUrl(); 文字列personGooglePlusProfile = currentPerson.getUrl(); 文字列email = Plus.AccountApi.getAccountName(mGoogleApiClient); どのように私はそれをフェッチしています... –

答えて

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

1

あなたのケースではわかりませんが、getEmailがnullを返す他のフィールドを取得できる状況の1つは、Firebaseコンソール>認証>サインインメソッドで "作成同じメールアドレス」

で複数のアカウントで既にGoogleに提出closed bug reportあります:

あなたは認証へ行く>サインインプロジェクトの方法ページをFirebaseコンソールで。 電子メールアドレスごとに1つのアカウントをオンまたはオフにしますか?電子メールアドレスごとに複数のアカウントを許可する場合、はFirebaseUserにnullを取得します。 getEmail()

enter image description here

あなたはオプションを使用する必要があります: "同じメールアドレスで複数のアカウントの防止の作成" または他のFirebaseUser.getEmail()が返されますnullを

Ps:オプションを無効にした後初めてログインしたユーザーのみがこのメソッドを正常に使用できます

関連する問題