美文网首页
Android 接入Google原生登录(非firebase)

Android 接入Google原生登录(非firebase)

作者: ProgrammerOz | 来源:发表于2021-03-10 10:09 被阅读0次

    参考 谷歌登录官方文档

    首先得有个自己的项目,在开发者后台里创建项目

    image.png

    项目配置方式1
    在API控制台里选择该项目
    1、在OAuth同意屏幕里填写资料,
    2、在凭据里为自己的项目创建一个Android客户端ID,需要指定包名以及SHA1签名,建议开发跟发布环境的签名都添加进去
    3、在凭据里再创建一个server_client_id

    项目配置方式2
    1、如果是首次使用谷歌相关服务,需要下载个google-service.json文件
    git clone https://github.com/googlesamples/google-services.git
    2、可以在这个页面直接配置项目的Android客户端ID

    image.png
    image.png

    再将server_client_id写入strings.xml文件里
    <string name="server_client_id">YOUR_SERVER_CLIENT_ID</string>

    项目配置到这里就基本完成了,接下来是代码接入
    1、在登录页面的onCreate里获取Google配置跟Google client

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken(getString(R.string.server_client_id)).requestEmail().build();
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
    

    这里需要注意下,上面的
    .requestIdToken(getString(R.string.server_client_id))
    在官方文档里是没有的,不加会失败。
    2、使用系统自带的按钮(较为简单就不介绍了)或自定义的按钮去实现登录功能,在按钮的点击事件里调用以下方法

    Intent signInIntent = mGoogleSignInClient.getSignInIntent();
    startActivityForResult(signInIntent, RC_SIGN_IN);
    

    3、在页面的回调里接收返回数据

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            // The Task returned from this call is always completed, no need to attach
            // a listener.
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
    }
    
    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
            // Signed in successfully, show authenticated UI.
            updateUI(account);
        } catch (ApiException e) {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
            Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
            updateUI(null);
        }
    }
    

    备注:可以通过lastSign方法获取用户的登录状态,如果为null则没有登录过

    GoogleSignInAccount lastSignedInAccount = GoogleSignIn.getLastSignedInAccount(this);
    if (lastSignedInAccount != null) {
        mGoogleSignInClient.signOut();
    }
    

    注意,GP的SHA1密钥,跟自己的release密钥不是同一个,所以还需要把GP的密钥也添加上去,如图


    image.png

    相关文章

      网友评论

          本文标题:Android 接入Google原生登录(非firebase)

          本文链接:https://www.haomeiwen.com/subject/qfdbqltx.html