Android集成google登录

1.在项目的build.gradle中添加以下库

allprojects {
    repositories {
        google()

        // 4.1以下的gradle,用下面的代替 google()
        // maven {
        //     url 'https://maven.google.com'
        // }
    }
}

2.在app下的build.gradle添加以下依赖

    dependencies {
        implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

3.在google api 控制台申请参数时需要填写 包名 和签名文件的 SHA1 (此步骤一般由产品完成,我们只需提供相应的参数就ok)

//获取SHA1的命令,keytool在jdk安装路径下,配置了jdk环境变量的可以直接是cmd下使用
keytool -list -keystore 你的签名文件的全路径 -v

4.接入代码----登录

  • 调用授权
        GoogleSignInOptions gso = new GoogleSignInOptions
                .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)//获取用户的基本信息
                .requestEmail()//获取邮箱
                .build();
        GoogleSignInClient client = GoogleSignIn.getClient(this, gso);//创建 GoogleSignInClient 对象
        Intent signInIntent = client.getSignInIntent();
        startActivityForResult(signInIntent, 5000);//开始请求授权,请求码自己定
  • 结果返回处理(在 onActivityResult 当中)
@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 5000) {//请求google登录的返回
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
    }

    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
            //登录成功获取用户信息
            System.out.println(account.getId());
            System.out.println(account.getEmail());
        } catch (ApiException e) {
            //登录失败
            Log.w("TAG", "signInResult:failed code=" + e.getStatusCode());
        }
    }
  • 此外还提供了用户是否已经登录了(可以在调用上述授权方法之前调用此方法判断是否需要重新授权)
        GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
        if (account != null){
            System.out.println("用户已登录");
        }

5.接入代码-----登出

        client.signOut()
                .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if(task.isSuccessful()){}
                    }
                });

6.断开连接-----可选接入

        client.revokeAccess()
                .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                    }
                });

写在最后,一般登录失败了请检查 包名 ,签名,是否有vpn环境,再不行看日志看返回的状态码

posted @ 2022-08-11 11:57  呢哇哦比较  阅读(1081)  评论(0)    收藏  举报