2016-11-29 1 views
3

Я пытаюсь интегрировать Google Sign-in в приложение для Android.Android - Google Вход в систему getDisplayName(), дающий мне E-Mail вместо отображаемого имени в новой учетной записи add

Вот мой код:

@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); 
    } 
} 

Теперь, когда я пытаюсь войти в в мое приложение, если я использую предварительно настроенную учетную запись, выбрав его в диалоге AccountChooser, она прекрасно работает.

Однако, если в диалоговом окне AccountChooser, я использую «Добавить учетную запись» вариант в Account Chooser и добавить новую учетную запись, это дает мне электронную почту в userName = acct.getDisplayName() вместо пользователей Имя и дает мне нуль в url = acct.getPhotoUrl()

Но если я выйду из своего приложения и использую ту же учетную запись, выбрав одну из них с помощью учетной записи, она отлично работает, и я не могу понять, почему.

Любая помощь будет оценена по достоинству.

+0

Вы решили это или почему это происходит? –

+0

Не повезло на этом фронте. То, что я сделал, это проверить, получаю ли я имя или адрес электронной почты от Google, и, если бы я получил электронную почту, снова открыл учетную запись. –

ответ

0

У меня также была такая же проблема, после добавления requestIdToken («Идентификатор вашего сервера») в GoogleSignInOptions теперь я получаю все данные, когда мы добавляем новую учетную запись, а google login - обновленный код GoogleSignInOptions, замените идентификатор клиента вашего сервера на свои идентификаторы клиента Outh, а затем получите правильные данные.

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

относятся также этот Google Signin returns display name as null only when Add account in the flow

Спасибо.