前言
公司做海外产品的,集成的是 google 账号登录,账号信息、邮箱等这些不涉及隐私的按 google 的正常登录流程可以轻松实现 。但是一旦需要获取涉及隐私的信息就比较麻烦,文档也不是十分清晰,非常难找,很多坑。
google 账号登录
官方链接:https://developers.google.com/identity/sign-in/android/start
https://developers.google.com/identity/sign-in/android/sign-in
google 账号登录接入的坑:
- 申请的 client_id必须是 api console 后台 :https://console.cloud.google.com/apis 与 google play 后台对应的应用关联起来。
- client_id下的签名信息和报名信息必须和测试时的 apk 的签名信息和报名信息一致。
- 在 google play 下启动 google 的二次签名,则 api console 后台的签名信息是二次签名后的信息。打包测试时使用上传 到 Google play 后台的 apk 的签名证书即可。
google 登录的流程在这个文档写的比较清楚了:https://developers.google.com/identity/sign-in/android/sign-in,这里大致说一下,不贴代码了
构建需求请求的内容:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken("your client_id") .build();// Build a GoogleSignInClient with the options specified by gso.mGoogleSignInClient = GoogleSignIn.getClient(this, gso);2.发起登录请求,跳转 google 登录页面。
Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN);获取 Google 登录返回
@Overridepublic 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); }}获取 用户 id token,传到你自己的 服务端 做验证
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount account = completedTask.getResult(ApiException.class); // Signed in successfully, show authenticated UI. } 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()); }}切换账号
/** * 重新获取账号列表 */ public void revokeAccess() { try { if (mGoogleSignInClient!=null && mActivity!=null){ mGoogleSignInClient.revokeAccess().addOnCompleteListener(mActivity, new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { Log.d(TAG, "onComplete: "); } }); } } catch (Exception e){ e.printStackTrace(); } }获取公开资料和需要特别授权的信息(性别、生日等)
1、在构建请求是新增获取 的公共资料信息 及 需要获取的特殊信息
private static final String GENDER_SCOPE = "https:///people/api/rest/v1/people/get总结
到此这篇关于Android 集成 google 登录并获取 性别等隐私信息的文章就介绍到这了,更多相关Android 集成 google 登录并获取 性别等隐私信息内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!