@

前言

准备

近日,公司要求上线海外市场,需要接入海外SDK,首先上架的是GooglePlay,需要先接入GooglePlay登录,这里我们选择的接安卓原生,需要手机安装谷歌三件套,如果没有安装好的就去下载一个Go谷歌安装器,里面有一键安装。注:“手机必须搭梯子(这里不让说,否则审核不通过)”。

开始

刚开始肯定要先查阅文档,我为此翻阅了不少博文,但是好多文章都说的一知半解的,搞半天也没头绪(每个公司都有自己的项目,我们在原项目上开发,注定要多走些路子)。首先,你先确定你是接Google原生登录,还有一种是集成FireBase的(不知道说法对不对),这里只说前者,后者我也没做,等后面再说吧。
这里非常感谢一名在稀土掘金的叫Silence潇湘夜雨的大佬两句话就把我的活说明白啦。在这里我结合他的博文来做一下我工作的详细记录。

AndroidStudio

我们开发的项目先导出安卓,因为我们项目接过好几个渠道,所以比较乱一点,搞得我也很头痛,项目里也有分渠道打包,我看到不是很懂,只有以后再重新弄一下。
首先我们要先导入Google登录所要用到的库,在app下的build.gradle里面的的dependencies里配置一下Google服务

implementation 'com.google.android.gms:play-services-auth:16.0.0'

然后在最上面点击Sync Now (有问题可以降一个版本,比如开发文档说要用17.0.0我的项目就适配不了用的是16.0.0)

然后我们就可以在MainActivity里面开始写我们的代码了。
先声明一个 private GoogleSignInClient mGoogleSignInClient;
在onCreate()方法里写上

 //TODO Google登录
 //配置登录以请求用户的ID,电子邮件地址和基本配置文件.ID和基本配置文件包含在DEFAULT_SIGN_IN中.
  GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
           .requestEmail()
           .requestIdToken(Constants.GoogleAppID)
           .build();
 //使用gso指定的选项构建一个GoogleSignInClient.
 mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

Constants.GoogleAppID里面配置的是server_client_id,(server_client_id怎么获取下面会说明)
Google登录肯定有按钮,用按钮事件调用googleLogin()方法

 public void googleLogin() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, 1000);
    }

上面两行的代码是调起Google账号登录的界面

授权成功后肯定要回调,在onActivityResult()方法接收回调,这里面我写了两种方式,用哪一种都可以。这里handleSignInResult方法重载了一下,用一个就好。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == 1000) {
            //方式一
//            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
//            handleSignInResult(result);
            //方式二
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
}
 private void handleSignInResult(GoogleSignInResult result){
        Constants.Log("handleSignInResult方法调用----" + result.isSuccess());

        if (result.isSuccess()) {
            GoogleSignInAccount account = result.getSignInAccount();
            //account里可以直接获取到ID,name,和头像
            Constants.Log( "id--------" + account.getId() + "----name----" + account.getDisplayName() + "---photo--" + account.getPhotoUrl());
            String idToken = account.getIdToken();

           Constants.Log("Token-----"+idToken+"-----");
        }
    }
    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
            //account里可以直接获取到ID,name,和头像
             Constants.Log( "id--------" + account.getId() + "----name----" + account.getDisplayName() + "---photo--" + account.getPhotoUrl());
            String idToken = account.getIdToken();

            Constants.Log("Token-----"+idToken+"-----");

        } catch (ApiException e) {
            Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
            Constants.Log("错误信息为"+e.toString());
        }
    }

这里面的Token值验证账号的时候会用的到。至于还要用到什么数据你就和后台沟通一下,直接传过去就好。

可见,接入谷歌登录还是很简单的,明白了流程,一会就弄好,个人感觉主要是不知道怎么弄API后台的设置

server_client_id


先弄一下OAuth同意屏幕的描述,按照你项目填写

再创建一下OAuth客户端id,其中

这个就是server_client_id,传入项目就可以啦。

如果有什么问题的话下方给我留言,我看到的话就会尽快回复的哦
现在没写完的,后面待写....................

Android Studio接谷歌原生登录的更多相关文章

  1. Android studio 开发一个用户登录界面

    Android studio 开发一个用户登录界面 activity_main.xml <?xml version="1.0" encoding="utf-8&qu ...

  2. 【原创】如何在Android Studio下调试原生安卓Framework层面的源代码

    1. Open Existing Android Studio Project. 2. 打开后, Projects -> Android 里面是空的. 这时候,需要选到 Projects-> ...

  3. Android Studio—增删改查—登录功能

    SQLite数据库的常用操作: create table if not exists 表名(字段1 类型(长度),字段2 类型(长度),...)//       建表 drop table if ex ...

  4. Android Studio原生库创建示例

    [时间:2017-07] [状态:Open] [关键词:Android,Android Studio,gradle,native,c,c++,cmake,原生开发] 0 引言 最近在工作中遇到了升级A ...

  5. [Android 新特性] 谷歌发布Android Studio开发工具1.0正式版(组图) 2014-12-09 09:35:40

    Android Studio是谷歌于13年I/O大会推出的Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的Androi ...

  6. 基于android studio的快捷开发(将持续更新)

    对于Android studio作为谷歌公司的亲儿子,自然有它的好用的地方,特别是gradle方式和快捷提示方式真的很棒.下面是我在实际开发中一些比较喜欢用的快速开发快捷键,对于基本的那些就不多说了. ...

  7. Android开发学习之路-Android Studio开发小技巧

    上一次发过了一个介绍Studio的,这里再发一个补充下. 我们都知道,Android Studio的功能是非常强大的,也是很智能的.如果有人告诉你学Android开发要用命令行,你可以告诉他Andro ...

  8. Android Studio的下载和安装教程(从ADT到AS)

    之前一直使用的是Android development tools(简称ADT),后来说是google对ADT不再提供支持,然后一直在考虑是否把自己电脑换成Android Studio(简称AS),从 ...

  9. Android Studio 经常使用功能介绍

    为了简化 Android 的开发力度,Google 决定将重点建设 Android Studio 工具.Google 会在今年年底停止支持其它集成开发环境.比方 Eclipse. Android St ...

随机推荐

  1. group by 如何合并字符串优化记?

    sqlserver 2005及以上版本 表(tb) id    value 1     aa 2     cc 3     bb 3     dd 4     aa 4     cc 4     dd ...

  2. docker相关概念介绍

    关键词:docker容器与docker镜像 他们之间的关系是docker容器通过docker镜像来创建 docker镜像就是些像ubuntu15.10,ubuntu14.2一样的系统 docker容器 ...

  3. cocos2d-x 系统学习cocos(1)

    简析HelloWorld场景 以前使用cocos2d-x 3.14的时候,HelloWorld并不是一个场景类,而是一个图层类,当时的HelloWorld::createScene()是长这样的 Sc ...

  4. Android4.4 RIL软件框架

    本文主要对android4.4 RIL的telephony与modem的命令交互流程进行分析,当然本文不是重点介绍telephony.telephony涉及具体业务逻辑内容比较多,包括sim.dail ...

  5. 运维自动化神器ansible之group模块

    ansible之group模块 group模块是用来添加或者删除组 首先使用ansible-doc来查看用法 [root@note0 ansible]# ansible-doc -s group - ...

  6. asp.net core 腾讯验证码的接入

    asp.net core 腾讯验证码的接入 Intro 之前使用的验证码服务是用的极验验证,而且是比较旧的,好久之前接入的,而且验证码服务依赖 Session,有点不太灵活,后来发现腾讯也有验证码服务 ...

  7. numpy.random.rand

    numpy.random.rand(d0,d1,...,dn ) 给定形状中的随机值. 创建一个给定形状的数组,并用统一分布的随机样本填充它.[0, 1) 参数: d0,d1,...,dn:int,可 ...

  8. Java编程思想——第17章 容器深入研究 读书笔记(一)

    这一章将学习散列机制是如何工作的,以及在使用散列容器时怎么样编写hashCode()和equals()方法. 一.容器分类 先上两张图 来概况完整的容器分类 再细说都为什么会有那些特性. 二.填充容器 ...

  9. windows 7 专业版 64位 无法安装.Net 4.7版本解决方案

    什么暂停windows update,改文件夹,再恢复windows update等等方法都试了,不行之后就觉得这才是终极解决方案. 不管你是win 7什么版本,你只需要下载安装对应系统的Window ...

  10. C++ set 用法略解

    先看一段代码. #include<iostream> #include<set> #include<cstdio> #include<cstdlib> ...