最近接触到海外SDK的工作,国外SDK的接入跟国内的接入有很大的区别,所以踩了不少坑,用此文章来记录一下避免以后再次踩坑,也希望对一些刚接触Google登录的小白有一些帮助。这篇文章是关于原生的集成Google登录,而不是通过Firebase来集成Google登录。
1.环境配置
2.配置自己的应用

2.3点击新建一个自己的项目,其它选项是我之前创建过的项目,默认是没有的

2.4新建项目主要是填写你的应用信息,其中要注意的是下图所示的SHA-1的值。

2.5获取SHA-1方法:打开命令窗口-->输入命令keytool-list-v-keystore mystore.keystore其中mystore.keystore为你的应用签名文件的地址。由于是测试我使用的是安卓应用的默认签名文件,所以我的完整命令为keytool -list -v -keystore C:\Users\pc\.android\debug.keystore输入之后他会提示你输入密钥库口令,默认签名的口令为android。如下图所示将会显示出你的SHA-1的值。如果使用正式签名文件请在命令中替换签名文件路径(如果此方法无法获取到的话就去百度找找其他方法吧)。

2.6按下图所示选择自己的项目然后创建API密钥

创建之后API密钥会有一个黄色的警告标志,需要点击一下API密钥1进行设置

进入到API密钥1设置页面之后主要有如下所示的两步,选择自己的应用类型(我的应用为安卓所以选择Android应用),添加软件包名称和指纹(也即是我们之前创建应用的时候输入的SHA-1的值),完成这两部之后点击保存。

到此我们接入谷歌登录的应用配置也就完成了,接下来的就是代码接入的工作(感觉接海外SDK时都需要到对应的后台配置自己的应用,这也正是接海外SDK的一大难处,很多刚接触的人来说往往在配置应用之时花费了很多时间)。
3.代码的接入
在你的app级目录下build.gradle文件对应位置添加红色部分代码
3.3下面这些代码相当于在调用谷歌登录时的初始化操作。调用.requestIdToken是为了在登录结果返回时能返回token信息传到自己服务端去校验登录(如果不需要自己服务端去校验登录可以不加上,如果不加上返回的token将为null)。其中requestIdToken()需要传一个字符。此字符串为我们之前配置应用时候分配的客户端ID如下图所示。
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()Web ClientId.build() mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
3.4点击登录按钮之时调用Google登录的方法(登录按钮可自定义也可以用google提供的登录按钮),其实就是开启一个Google的登录界面,其中的RC_SIGN_IN需要自己自定义但是要大于0。
Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN);
3.5登录结果将在Activity的onActivityResult方法中回调。
@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);(task);} } private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {try GoogleSignInAccount account = completedTask.getResult(ApiException.class); String user_id = account.getId(); String idToken = account.getIdToken();} 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())} } 4.谷歌登出的实现
private void signOut() {.signOut().addOnCompleteListener(this, new OnCompleteListener<Void>() {@Overridepublic void onComplete(@NonNull Task<Void> task) {//退出成功 revokeAccess(); }}); }private void revokeAccess() {.revokeAccess().addOnCompleteListener(this, new OnCompleteListener<Void>() {@Overridepublic void onComplete(@NonNull Task<Void> task) {// Google账户与你的应用程序断开连接成功}}); }5.测试出现的问题
