Android应用添加谷歌登录(Google Sign In)

语言: CN / TW / HK

Android平台添加Google登录便于读取用户信息,也便于将应用发布到GooglePlay。 具体步骤如下,个人觉得还是比较繁琐的,一步一步来看吧。

服务账号创建项目

https://developers.google.com/workspace/guides/create-credentials

截屏2023-01-01 17.30.54.png 每个Google账号可以创建12个项目。

截屏2023-01-01 17.32.19.png 点击创建。

创建凭据

截屏2023-01-01 17.41.11.png

截屏2023-01-01 17.42.29.png 这里提示要先创建OAuth同意屏幕。

截屏2023-01-01 17.44.11.png 点击创建。

截屏2023-01-01 17.46.01.png 带*的信息都是要填写的,邮箱就用当前这个就好。

回来创建OAuth客户端ID。

截屏2023-01-01 17.47.47.png 选择Android。

然后获取jks的SHA1指纹。debug.keystore的调试密钥库也行,密码是android。 keytool -keystore path-to-debug-or-production-keystore -list -v path-to-debug-or-production-keystore换成你打包签名用的jks或debug.keystore的路径也行。然后将SHA1信息填入。

截屏2023-01-01 17.55.42.png 然后下载配置信息JSON文件,后续代码会用到里面的信息。

代码编写

创建GoogleSignInClient java GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestId() .requestProfile() .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build(); mGoogleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions); 点击谷歌登录按钮跳转google登录 java Intent intent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(intent, CODE_SIGN_IN); 登录的回调

java @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == CODE_SIGN_IN && resultCode != 0) { Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); handleSignInResult(task); }

java private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount account = completedTask.getResult(ApiException.class); GgOrFbUserInfo ggOrFbUserInfo = new GgOrFbUserInfo(); ggOrFbUserInfo.setAvatar(account.getPhotoUrl() == null ? "": account.getPhotoUrl().toString()); ggOrFbUserInfo.setLtype(1); ggOrFbUserInfo.setUserId(account.getId()); ggOrFbUserInfo.setEmail(account.getEmail()); ggOrFbUserInfo.setEmailVerified(1); ggOrFbUserInfo.setName(account.getDisplayName()); ggOrFbUserInfo.setLanguage(CommonPramsUtil.getSystemLanguage()); ggOrFbUserInfo.setFamilyName(account.getFamilyName() == null ? "" : account.getFamilyName()); ggOrFbUserInfo.setGivenName(account.getGivenName()); ggOrFbUserInfo.setRegion("zn"); login(ggOrFbUserInfo); // 这里拿用户google账号的信息调用自己业务的login if (account.getPhotoUrl() != null) { Glide.with(LoginActivity.this).load(account.getPhotoUrl()).into(ivAvatar); } } catch (ApiException e) { // 在这里获取错误信息 } } 退出登录

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

后续

你可以使用firebase做一些其他的事情,如埋点统计等。