2016-11-29 1 views
3

Ich versuche, Google Sign-in in meiner Android-App zu integrieren.Android - Google-Anmeldung getDisplayName() Geben Sie mir E-Mail statt Anzeigename für neues Konto hinzufügen

Hier ist mein Code:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    PrefUtil.setTaskBarColored(this, R.color.treasure_black); 
    setContentView(R.layout.activity_login); 
    ButterKnife.bind(this); 
    loginHandler = new LoginHandler(this); 
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestEmail() 
      .requestProfile() 
      .build(); 

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this, this) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .addApi(AppIndex.API).build(); 
} 
@OnClick(R.id.btn_login) 
    public void OnLoginButtonClick() { 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
     DialogClass.showDialog(this, "Signing In"); 
    } 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == RC_SIGN_IN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     handleSignInResult(result); 

    } else { 
     DialogClass.dismissDialog(this); 
    } 
} 

private void handleSignInResult(GoogleSignInResult result) { 

    if (result.isSuccess()) { 
     GoogleSignInAccount acct = result.getSignInAccount(); 


     userName = acct.getDisplayName(); 
     Log.i("userName",userName); 
     email = acct.getEmail(); 
     Uri url=null; 
     if(acct.getPhotoUrl()!=null){ 
      url = acct.getPhotoUrl(); 

     } 
     String imageUrl=null; 
     if(url!=null && (!TextUtils.isEmpty(url.toString()))){ 
      imageUrl=url.toString(); 
      PrefUtil.putString(Constant.PreferenceKey.USER_IMAGE,imageUrl); 

     } 
     LoginRequestModel loginRequestModel = new LoginRequestModel(email, userName, imageUrl); 
     loginHandler.getUserDetails(loginRequestModel); 
     signOut(); 

    } else { 
     DialogClass.dismissDialog(this); 
    } 
} 

Jetzt, wenn ich versuche, in meiner App Log-in, wenn ich ein vorkonfiguriertes Konto verwenden, indem es im AccountChooser Dialog Auswahl, es funktioniert perfekt.

Wenn jedoch im AccountChooser Dialog, verwende ich die „Konto hinzufügen“ Option der Account Chooser und ein neues Konto hinzufügen, es gibt mir E-Mail in userName = acct.getDisplayName() anstelle des Benutzer-Namen, und gebe ich null in url = acct.getPhotoUrl()

Aber wenn ich mich von meiner App abmelde und das gleiche Konto benutze, indem ich den SAME-Account über den Account-Chooser auswähle, funktioniert das perfekt, und ich kann nicht herausfinden, warum.

Jede Hilfe wird geschätzt.

+0

Haben Sie das gelöst, oder warum passiert das? –

+0

Kein Glück an dieser Front. Was ich getan habe, war zu überprüfen, ob ich den Namen oder die E-Mail von Google bekomme, und wenn ich eine E-Mail erhalten habe, habe ich die Kontoauswahl erneut geöffnet. –

Antwort

0

Ich bekam auch das gleiche Problem, nachdem ich die requestIdToken ('Ihre Server-Client-ID') in den GoogleSignInOptions hinzugefügt habe, jetzt bekomme ich alle Daten, wenn wir das neue Konto hinzufügen, während google login der aktualisierte GoogleSignInOptions-Code ist. Ersetzen Sie die Server-Client-ID durch die Outh-Client-ID Ihres Google-Projekts, dann erhalten Sie die richtigen Daten.

GoogleSignInOptions gso = new  GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestEmail() 
       .requestProfile() 
       .requestIdToken('Your server client id') 
       .build(); 

Auch verweisen die dieses Google Signin returns display name as null only when Add account in the flow

Dank.

Verwandte Themen