Android-Google登录getDisplayName()给我发送电子邮件,而不是在新帐户上添加显示名称

Ayu*_*pta 5 android google-account google-oauth google-signin

我正在尝试整合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);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试登录我的应用程序时,如果我通过在AccountChooser对话框中选择它来使用预先配置的帐户,则它可以完美运行。

但是,如果在AccountChooser对话框中,我使用的“添加帐户”选项Account Chooser并添加一个新帐户,则会给我发送电子邮件,userName = acct.getDisplayName()而不是用户名,并且给我提供空url = acct.getPhotoUrl()

但是,如果我注销应用程序并通过帐户选择器选择SAME帐户来使用相同的帐户,则它可以完美运行,并且我无法弄清原因。

任何帮助将不胜感激。

小智 0

我也遇到了同样的问题,在 GoogleSignInOptions 中添加 requestIdToken('您的服务器客户端 id') 后,现在当我们添加新帐户时,当 google 登录时,我得到了所有数据。下面是更新的 GoogleSignInOptions 代码,替换您的服务器客户端ID与您的谷歌项目Outh客户端ID,然后您将获得正确的数据。

GoogleSignInOptions gso = new       GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .requestProfile()
                .requestIdToken('Your server client id')
                .build(); 
Run Code Online (Sandbox Code Playgroud)

另请参阅仅当在流程中添加帐户时此Google 登录返回显示名称为 null

谢谢。