想法 : 写了好久代码了,但是都没有具体的总结下。总是用到的时候,再去翻看资料。一看就是一堆,到最后都不一定能管用。
近期做了一些项目,涉及到了登录授权。细回想下,自己接过的登录授权还真心不少。不同的授权都会一一列举,以后方便自己,也希望能够方便大家。
做开发的话,资源必不可少。 我们需要有Google 账户,拿到开发者权限,才能进行开发。
Google账户注册
自己去搞吧,就不多说了
但是在流程中会有一个google-services.json 的文件,要记得拷贝下来,放到工程目录下面
直接上代码
首先 确保我们的根目录的build.gradle文件添加了Google服务
allprojects { repositories { google() } } dependencies { classpath 'com.google.gms:google-services:4.3.4' }根目录的build.gradle文件有Google服务之后,在我们项目目录下的build.gradle文件中添加
apply plugin: 'com.google.gms.google-services' dependencies { implementation 'com.google.android.gms:play-services-auth:18.1.0' }在这里我推荐使用最新的版本,比较与时俱进不是
最新版本可以在官方文档之中获取,目前我使用的是18.1.0版本
依赖引入之后就可以在我们的登录页面进行登录操作的初始化了。
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build()在进行GoogleSignInOptions初始化的时候建议传入
GoogleSignInOptions.DEFAULT_SIGN_IN我们看一下源码
public static final GoogleSignInOptions DEFAULT_SIGN_IN = (new GoogleSignInOptions.Builder()).requestId().requestProfile().build();也就是说,传入中国参数之后就相当于进行了下面的操作
val gso = GoogleSignInOptions.Builder() .requestId() .requestProfile() .build()大家看到我的博客的时候可能已经看过其他人的了,接下来的流程可能有所不同
配置好google 登录参数之后,需要实现一下google客户端的配置
mGoogleApiClient = GoogleApiClient.Builder(this) .enableAutoManage(this) { } .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build()到这里的话,基本上初始的配置就已经结束了。
接下来就是调用登录的步骤
<com.google.android.gms.common.SignInButton android:id="@+id/sb_google" android:layout_width="@dimen/x100" android:layout_height="@dimen/x100" android:background="@color/color_7b808e" android:onClick="@{(view)->context.logIn1()}" />这个呢是Google提供的登录按钮,自带一个google的图标。写demo的时候可以直接使用。(自我感觉不好看,效果也不好改)
但是登录按钮是其次的,一开始我也差点没转过来。
布局随意写,根据UI写就好,不用在意的说一定要使用SignInButton按钮
布局绘制完成之后,添加一个点击事件
rf_google_paly_signin.setOnClickListener { googlePlaySignIn() }我的工程呢是使用的androidX + kotlin的
点击按钮的时候调用googlePlaySignIn方法进行登录操作(这一步一定要翻墙)
private fun googlePlaySignIn() { val intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient) startActivityForResult(intent, 0*100) }因为,登录授权是在外部进行的操作,所以要获取到回调信息,需要到onActivityResult之中进行操作。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == 0*100) { var result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); handleGooglePlaySignInResult(result); } } private fun handleGooglePlaySignInResult(result: GoogleSignInResult) { try { if (result.isSuccess) { val account = result.signInAccount //登录成功,已取得数据 } }catch (e : ApiException) { } }如果需要退出登录,可以使用
Auth.GoogleSignInApi.signOut(mGoogleApiClient)由于开发的时候,国外账号申请困难,登录是由国外朋友进行操作的。 但是,google的授权登录是通畅的,至此,google 授权告一段落。
代码地址 : https://download.csdn.net/download/leiyaqiang/12996583 博客写完之后就写的demo,方便大家下载。 小东西,比较琐碎,二期必须要有注册过的包名,不太适合放到Git上面