Android - вход в Google getDisplayName() дает мне E-Mail вместо отображаемого имени при добавлении новой учетной записи

Я пытаюсь интегрировать Google Sign-in в моем приложении для Android.

Вот мой код:

@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 и добавить новую учетную запись, он дает мне E-Mail в userName = acct.getDisplayName() вместо имени пользователя, и дает мне ноль в url = acct.getPhotoUrl()

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

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

1 ответ

Решение

Я также получал ту же проблему, после добавления requestIdToken('Идентификатор клиента вашего сервера') в GoogleSignInOptions теперь я получаю все данные, когда мы добавляем новую учетную запись, в то время как логин Google, следующий за обновленным кодом GoogleSignInOptions, замените ваш сервер идентификатор клиента с вашими проектами Google Outh идентификатор клиента, тогда вы получите правильные данные.

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

Также обратитесь к этому Google Signin возвращает отображаемое имя как ноль только при добавлении учетной записи в потоке

Благодарю.

Другие вопросы по тегам