Google登录的集成

匿名 (未验证) 提交于 2019-12-03 00:26:01

最近接触到海外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.测试出现的问题





文章来源: Google登录的集成
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!