参考 谷歌登录官方文档
首先得有个自己的项目,在开发者后台里创建项目
项目配置方式1
在API控制台里选择该项目
1、在OAuth同意屏幕里填写资料,
2、在凭据里为自己的项目创建一个Android客户端ID,需要指定包名以及SHA1签名,建议开发跟发布环境的签名都添加进去
3、在凭据里再创建一个server_client_id
项目配置方式2
1、如果是首次使用谷歌相关服务,需要下载个google-service.json文件
git clone https://github.com/googlesamples/google-services.git
2、可以在这个页面直接配置项目的Android客户端ID
image.png
再将server_client_id写入strings.xml文件里
<string name="server_client_id">YOUR_SERVER_CLIENT_ID</string>
项目配置到这里就基本完成了,接下来是代码接入
1、在登录页面的onCreate里获取Google配置跟Google client
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken(getString(R.string.server_client_id)).requestEmail().build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
这里需要注意下,上面的
.requestIdToken(getString(R.string.server_client_id))
在官方文档里是没有的,不加会失败。
2、使用系统自带的按钮(较为简单就不介绍了)或自定义的按钮去实现登录功能,在按钮的点击事件里调用以下方法
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
3、在页面的回调里接收返回数据
@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);
handleSignInResult(task);
}
}
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
// Signed in successfully, show authenticated UI.
updateUI(account);
} 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());
updateUI(null);
}
}
备注:可以通过lastSign方法获取用户的登录状态,如果为null则没有登录过
GoogleSignInAccount lastSignedInAccount = GoogleSignIn.getLastSignedInAccount(this);
if (lastSignedInAccount != null) {
mGoogleSignInClient.signOut();
}
注意,GP的SHA1密钥,跟自己的release密钥不是同一个,所以还需要把GP的密钥也添加上去,如图
image.png
网友评论