背景:之前一直做国内的项目,最近公司要做一款国外上架的app,因为海外和国内的文档,账号注册,demo测试等流程和国内大有不同,中间遇到了不少坑,在这里总结一下,有用到的小伙伴,可以借鉴下;

1.先撸官方文档

https://developers.google.com/identity/sign-in/android/sign-in

2.Google的Demo;

GitHub - googlesamples/google-services: A collection of quickstart samples demonstrating the Google APIs for Android and iOS

3.(1):注册Firebase账号 (https://console.firebase.google.com/)

(2):添加新应用

这里的json文件注意下载保存;

因为用到登录功能,SHA1还是需要的,

C:\Users\Alan>keytool -list -v -keystore <jks存放的路径>

SHA1填写的位置有那么几个,如果只是为了测试google登录,在刚才添加应用的那加上就可以了。如图这样:

但是在后面又遇到了坑, 由于需要google play上架,所以先提交了测试版,加入了测试账号,可以在商店下载,下载后发现google登录不了。于是,各种撸代码找坑。。。最终的原因是,Google Play当应用上传后,一是应用本身的SHA1(应用签名),二是Google Play会为应用重新生成一个SHA1(商店的签名); 所以最终的解决方案如下:

然后,打开Google应用凭据官网 (https://console.developers.google.com/apis/credentials),将两个签名分别添加进去,测试,商店下载的app可以正常三方登录了。

然后撸代码:

1. init初始化:

//google login setting
GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestId().requestProfile().requestIdToken(getString(R.string.default_web_client_id)).requestEmail() //可以获取到邮箱信息【这一步还挺有必要,不光可以获取到邮箱信息,还会影响到下面获取性别信息】.build();
mGoogleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions);

R.String.default_web_client_id   客户端ID

2.点击登录

Intent intent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(intent, CODE_SIGN_IN);
3.注册回调
 @Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == CODE_SIGN_IN && resultCode != 0) {Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);handleSignInResult(task);} else if(requestCode == CODE_SIGN_IN) {
//            ToastUtils.showShort(getResources().getString(R.string.net_error));assert data != null;ToastUtils.showShort( data.toString() );}
}

4.登录成功数据回调

/*** Google登录成功返回数据* @param completedTask*/private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {try {GoogleSignInAccount account = completedTask.getResult(ApiException.class);// Signed in successfully, show authenticated UI.GgOrFbUserInfo ggOrFbUserInfo = new GgOrFbUserInfo();ggOrFbUserInfo.setAvatar(account.getPhotoUrl() == null ? "": account.getPhotoUrl().toString());ggOrFbUserInfo.setLtype(1);ggOrFbUserInfo.setUserId(account.getId());ggOrFbUserInfo.setEmail(account.getEmail());ggOrFbUserInfo.setEmailVerified(1);ggOrFbUserInfo.setName(account.getDisplayName());ggOrFbUserInfo.setLanguage(CommonPramsUtil.getSystemLanguage());ggOrFbUserInfo.setFamilyName(account.getFamilyName() == null ? "" : account.getFamilyName());ggOrFbUserInfo.setGivenName(account.getGivenName());ggOrFbUserInfo.setRegion("zn");login(ggOrFbUserInfo); //在这走自己后台接口if (account.getPhotoUrl() != null) {
//                Glide.with(LoginActivity.this).load(account.getPhotoUrl()).into(imgHead);}Log.e(TAG, "account--------------->>>" + new Gson().toJson(account));} catch (ApiException e) {// The ApiException status code indicates the detailed failure reason.// Please refer to the GoogleSignInStatusCodes class reference for more information.
//            failedCode.setText("获取登录信息失败" + e.getMessage());Log.e(TAG, "signInResult:failed code=" + e.getStatusCode());ToastUtils.showShort(e.getMessage());}}

5.退出登录

mGoogleSignInClient.signOut().addOnCompleteListener(this, new OnCompleteListener<Void>() {@Overridepublic void onComplete(@NonNull Task<Void> task) {Log.d(TAG, "signOut: -----------------------------");// ...登出的逻辑}});

------------------以上就是Google登录和登出的所有步骤了-----------------------

(出海必备)Android三方登录之Google登录相关推荐

  1. Android三方登录之google登录

        在做公司的一个国外项目的时候,需要用到google的三方快捷登录,中间碰到了一些坑,在此Mark一下,如果有同样的问题的小伙伴看到可以少走些弯路,给自己也总结下开发过程. 点击进入谷歌的官方文 ...

  2. Android 应用程序集成Google 登录及二次封装

    谷歌登录API:  https://developers.google.com/identity/sign-in/android/ 1.注册并且登录google网站 https://accounts. ...

  3. 在Android App中集成Google登录

    技术文章 来源:码农网 发布:2016-09-19 浏览:194 摘要:今天,几乎所有的web和移动app都自带谷歌和Facebook登录,这对app开发者和用户来说是一个非常有用的功能,因为几乎每个 ...

  4. 前端学习——第三方登录(Google登录、Facebook登录)

    文章目录 前言 一.前端对接第三方登录有什么用? 二.使用环境 三.FB第三方登录 引入且封装成组件 四.G第三方登录 引入且封装成组件 五.页面上使用 总结 前言 本文介绍了作者本人学习前端Java ...

  5. Android 集成 google 登录并获取 性别等隐私信息

    前言 公司做海外产品的,集成的是 google 账号登录,账号信息.邮箱等这些不涉及隐私的按 google 的正常登录流程可以轻松实现 .但是一旦需要获取涉及隐私的信息就比较麻烦,文档也不是十分清晰, ...

  6. (unity)新手接入Facebook登录,分享以及google登录,Android,IOS,OC接入篇

    最近接Android,IOS的Facebook登录,分享 以及Google登录,分享流程以及遇到的问题整理. 一. Android接入 google登录 第一步,前往 [ firebase] http ...

  7. android google 登录登出接入

    官方地址 https://developers.google.com/identity/sign-in/android/sign-in 登录 集成google库 dependencies {    i ...

  8. Android Google登录接入

    一.接入准备 手机必须有Google套件 Google服务框架,Google Play商店,Google Play服务(使用su谷歌安装器下载安装) 手机必须可以翻墙 google开发者账号 二.官网 ...

  9. Android应用添加谷歌登录(Google Sign In)

    Android平台添加Google登录便于读取用户信息,也便于将应用发布到GooglePlay. 具体步骤如下,个人觉得还是比较繁琐的,一步一步来看吧. 服务账号创建项目 developers.goo ...

最新文章

  1. 12本最优秀的Android开发电子书强力推荐
  2. C语言字符数组与字符串的使用及加结束符‘\0‘的问题
  3. 我爱我家 CIO 刘东颖:如何靠六大维度提升“数字化”能力?|鲸犀峰会
  4. AI算法工程师必备技术,快快积累!
  5. linux开发工具之gcc
  6. linux oracle swd.oui,centos7安装oracle11g报错,请问怎么解?
  7. 服务器证书在注册表上位置,服务器ssl证书注册表
  8. 千兆交换机下面可以接多少层交换机_视频监控系统如何选择网络交换机
  9. 设计模式--中介者模式(Mediator)
  10. Eigen教程(2)之Matrix,Vectors, Dynamic介绍
  11. python代码混淆
  12. 纠错码较副本优势与minio纠错码配置
  13. 如果你的开发板上STM32采用外部晶振,那么就不能选择BYPASS Clock Source (旁路时钟源)模式,否则STM32将会工作不正常。
  14. no python interpreter selected_报No Python interpreter selected错误怎么办
  15. 利用Tensorflow构建RNN并对序列数据进行建模
  16. 算法题-----题目、题解、个人算法、个人思考
  17. iphone 3.1.2开发环境搭建——linux平台
  18. 高德SD地图数据生产自动化技术的路线与实践(道路篇)
  19. 7-1 求e的近似值 (15 分)
  20. 汽车类稿件撰写:介绍一款汽车的稿子怎么写?

热门文章

  1. 拼多多店铺怎么做咨询
  2. SQL难学吗,有什么好的学习建议?
  3. x是偶数的c语言表达式,【单选题】能表示x 为偶数的表达式是 A. x%2==0 B. x%2==1 C. x-. x%2!=0...
  4. 请教switch内部的变量定义问题?
  5. HTML5面试题目汇总(一)
  6. 超级实用——用word与谷歌翻译将英文PDF文档翻译成中文,免费无限制
  7. distinct , in 的用法
  8. 【语音智能平台】京东Alpha VS 讯飞开放平台 (一)
  9. Ubuntu Kylin系统中配置Apache服务器
  10. C语言-实现栈(stack)