Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android – Google登录getDisplayName()在新帐户添加时为我提供电子邮件而不是显示名称大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_696_4@ 我正在尝试将Google登录集成到我的 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_iR_250_11845@AGE,imageUrl);

        }
        LoginrequestModel loginrequestModel = new LoginrequestModel(email,userName,imageUrl);
        loginHandler.getUserDetails(loginrequestModel);
        signOut();

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

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

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

但是,如果我通过帐户选择器选择相同的帐户注销我的应用程序并使用相同的帐户,它可以正常工作,我无法弄清楚原因.

任何帮助将不胜感激.

解决方法

在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();

另请参阅此Google Signin returns display name as null only when Add account in the flow

谢谢.

大佬总结

以上是大佬教程为你收集整理的Android – Google登录getDisplayName()在新帐户添加时为我提供电子邮件而不是显示名称全部内容,希望文章能够帮你解决Android – Google登录getDisplayName()在新帐户添加时为我提供电子邮件而不是显示名称所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。