当前位置: 首页 > news >正文

Android Google登录并获取token(亲测有效)

背景:

Android 需要用到Google的登录授权,用去token给到服务器,服务器再通过token去获取用户信息,实现第三方登录。

我们通过登录之后的email来获取token,不需要server_clientId;如果用server_clientId还需要在google的控制台配置测试的账号,否则登录的时候会返回错误码10.

实现步骤:

1、 手机或者Pad连接可以访问google的网络

2、最外层的build.gradle增加依赖

dependencies {classpath 'com.google.gms:google-services:4.3.15'
}

app下的build.gradle增加依赖

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

3、初始化谷歌服务

val googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)

.requestEmail() .build()

//这里不要调用requestIdToken

mGoogleSignInClient = GoogleSignIn.getClient(activity, googleSignInOptions)

4、检查google 服务器是否可用,手机是否有环境

val isGooglePlayServicesAvailable=GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(activity)

5、如果没有环境,返回,流程结束

if (isGooglePlayServicesAvailable!= ConnectionResult.SUCCESS) {// 验证是否已在此设备上安装并启用Google Play服务,以及此设备上安装的旧版本是否为此客户端所需的版本GoogleApiAvailability.getInstance().makeGooglePlayServicesAvailable(activity)return@launchIO
}

6、如果有环境,调用google的登录,调转到第三方app

val signInIntent: Intent = mGoogleSignInClient!!.signInIntent
activity.startActivityForResult(signInIntent,100
)

7、重写Activity的这个方法,然后获取token

fun onActivityResult(requestCode: Int, data: Intent?) {if (requestCode == 100) {
      val completedTask: Task<GoogleSignInAccount> =GoogleSignIn.getSignedInAccountFromIntent(data)
val account: GoogleSignInAccount =completedTask.getResult(ApiException::class.java)
val status: Task<GoogleSignInAccount> = completedTask
if (!status.isSuccessful) {throw Exception(status.exception)
}

Log.d("测试", "account.email: " + account.email)
var loginGoogleRequest = LoginGoogleRequest()
loginGoogleRequest.bizId = CoreConstant.bizId
// Obtain token for access gmail account
var token: String =
    GoogleAuthUtil.getToken(
        CoreVariable.coreApplication,
        account.email!!,
        "oauth2:profile email"
    )
Log.d("测试", "token= " + token)
}

相关文章:

Android Google登录并获取token(亲测有效)

背景&#xff1a; Android 需要用到Google的登录授权&#xff0c;用去token给到服务器&#xff0c;服务器再通过token去获取用户信息&#xff0c;实现第三方登录。 我们通过登录之后的email来获取token&#xff0c;不需要server_clientId&#xff1b;如果用server_clientId还…...

npm ERR! code ELIFECYCLE

问题&#xff1a; 一个老项目&#xff0c;现在想运行下&#xff0c;打不开了 npm install 也出错 尝试1 、使用cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm install 还是不行 尝试2、 package.json 文件&#xff0c;去掉 那个插件 chorm…...

Mgeo:multi-modalgeographic language model pre-training

文章目录 question5.1 Geographic Encoder5.1.1 Encoding5.1.2 5.2 multi-modal pre-training 7 conclusionGeo-Encoder: A Chunk-Argument Bi-Encoder Framework for Chinese Geographic Re-Rankingabs ERNIE-GeoL: A Geography-and-Language Pre-trained Model and its Appli…...

[激光原理与应用-75]:西门子PLC系列选型

目录 一、西门子PLC PLC系列 二、西门子PLC S7 1200系列 2.1 概述 2.2 12xx系列比较 三、西门子 PLC 1212C系列 四、主要类别比较 4.1 AC/DC/RLY的含义 4.2 AC/DC/RLY与DC/DC/DC 4.3 直流输入与交流输入比较 4.4 继电器输出与DC输出的区别 一、西门子PLC PLC系列 …...

Linux上编译sqlite3库出现undefined reference to `sqlite3_column_table_name‘

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 在Ubuntu 18上编译sqlite3库后在运行程序时出现undefined reference to sqlite3_column_table_name’的错误。网上的说法是说缺少SQLITE_ENABLE_COLUMN_M…...

第十五章 EM期望极大算法及其推广

文章目录 导读符号说明混合模型伯努利混合模型(三硬币模型)问题描述三硬币模型的EM算法1.初值2.E步3.M步初值影响p,q 含义 EM算法另外视角Q 函数BMM的EM算法目标函数LEM算法导出 高斯混合模型GMM的EM算法1. 明确隐变量, 初值2. E步,确定Q函数3. M步4. 停止条件 如何应用GMM在聚…...

自动化测试如何准备测试数据

其实大部分类型的测试都需要去准备测试数据。 手工测试&#xff1a;一些基础数据&#xff0c;比如配置数据等等是需要去准备的&#xff1b;自动化测试&#xff1a;基础需要准备&#xff0c;现有数据&#xff0c;动态运行时产生的数据是需要准备的&#xff1b;性能测试&#xf…...

javaEE -13(6000字CSS入门级教程 - 2)

一&#xff1a;Chrome 调试工具 – 查看 CSS 属性 首先打开浏览器&#xff0c;接着有两种方式可以打开 Chrome 调试工具 直接按 F12 键鼠标右键页面 > 检查元素 点开检查即可 标签页含义&#xff1a; elements 查看标签结构console 查看控制台source 查看源码断点调试ne…...

vscode 使用python无法导入库

刚刚在使用vscode,编辑python时&#xff0c;在使用语句 import matplotlib.pyplot as plt 时出现报错&#xff0c;但是在命令行下和conda环境中没有报错 在尝试 pip uninstall matplotlib pip install matplotlib后无法解决 之后再发现是工作的目录出错导致的&#xff0c;…...

三维向量旋转

三维向量旋转 问题描述问题分析 v ⃗ ∣ ∣ \vec{v}_{||} v ∣∣​的旋转 v ⃗ ⊥ \vec{v}_{\bot} v ⊥​的旋转 v ⃗ \vec{v} v 的旋转结论致谢 问题描述 如图1所示&#xff0c;设一个向量 v ⃗ \vec{v} v 绕另一个向量 u ⃗ [ x , y , z ] T \vec{u}[x,y,z]^{T} u [x,y,z]T…...

顺序表——leetcode

原地删除数据 我们的思路这里给的是双指针&#xff0c;给两个指针&#xff0c;从前往后移动&#xff0c;如果不是val就覆盖&#xff0c;如果是我就跳过&#xff0c;大家一定要看到我们的条件是原地修改&#xff0c;所以我们不能另开一个数组来实现我们这道题目。 这里我们给两…...

Kaprekar 7641 - 1467= 6174

package homework;import java.util.Arrays;import util.StringUtil;/*** 数学黑洞数6174&#xff0c;即卡普雷卡尔&#xff08;Kaprekar&#xff09;常数&#xff0c; 它的算法如下&#xff1a; 取任意一个4位数&#xff08;4个数字均为同一个数的除外&#xff09;&#xff0…...

李宏毅机器学习笔记.Flow-based Generative Model(补)

文章目录 引子生成问题回顾&#xff1a;GeneratorMath BackgroundJacobian MatrixDeterminant 行列式Change of Variable Theorem简单实例一维实例二维实例 网络G的限制基于Flow的网络构架G的训练Coupling LayerCoupling Layer反函数计算Coupling Layer Jacobian矩阵计算Coupli…...

Java使用Spark入门级非常详细的总结

目录 Java使用Spark入门 环境准备 安装JDK 安装Spark 编写Spark应用程序 创建SparkContext 读取文本文件 计算单词出现次数 运行Spark应用程序 总结 Java使用Spark入门 本文将介绍如何使用Java编写Spark应用程序。Spark是一个快速的、通用的集群计算系统&#xff0c;它可以处理…...

kubernetes集群编排——k8s存储

configmap 字面值创建 kubectl create configmap my-config --from-literalkey1config1 --from-literalkey2config2kubectl get cmkubectl describe cm my-config 通过文件创建 kubectl create configmap my-config-2 --from-file/etc/resolv.confkubectl describe cm my-confi…...

【软件STM32cubeIDE下H73xx配置串口uart1+中断接收/DMA收发+HAL库+简单数据解析-基础样例】

#【软件STM32cubeIDE下H73xx配置串口uart1中断接收/DMA收发HAL库简单数据解析-基础样例】 1、前言2、实验器件3-1、普通收发中断接收实验第一步&#xff1a;代码调试-基本配置&#xff08;1&#xff09;基本配置&#xff08;3&#xff09;时钟配置&#xff08;4&#xff09;保存…...

jdk8和jdk9中接口的新特性

jdk8之前&#xff1a;声明抽象方法&#xff0c;修饰为public abstract。 jdk8&#xff1a;添加声明静态方法&#xff0c;默认方法。 jdk9&#xff1a;添加声明私有方法 jdk8: ①接口中声明的静态方法只能被接口来调用&#xff0c;不能使用其实现类进行调用 静态方法的声明&…...

1-爬虫-requests模块快速使用,携带请求参数,url 编码和解码,携带请求头,发送post请求,携带cookie,响应对象, 高级用法

1 爬虫介绍 2 requests模块快速使用 3 携带请求参数 4 url 编码和解码 4 携带请求头 5 发送post请求 6 携带cookie 7 响应对象 8 高级用法 1 爬虫介绍 # 爬虫是什么&#xff1f;-网页蜘蛛&#xff0c;网络机器人&#xff0c;spider-在互联网中 通过 程序 自动的抓取数据 的过程…...

java商城免费搭建 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…...

【TS篇一】TypeScript介绍、使用场景、环境搭建、类和接口

文章目录 一、TypeScript 介绍1. TypeScript 是什么1.2 静态类型和动态类型1.3 Why TypeScript1.4 TypeScript 使用场景1.5 TypeScript 不仅仅用于开发 Angular 应用1.6 前置知识 二、如何学习 TypeScript2.1 相关链接 三、起步3.1 搭建 TypeScript 开发环境3.2 编辑器的选择3.…...

【云计算学习之路】学习Centos7系统-Linux网络配置管理

Linux网络TCP/IP协议概述OSI 七层模型与 TCP/IP 四层模型 协议对照表IP地址及网络常识IP地址A类IP地址B类IP地址C类IP地址D类IP地址特殊的网址子网掩码网关地址MAC地址Linux服务器IP命名规范Linux服务器网卡及主机名命名Linux服务器上网DNS设置Linux服务器默认网卡配置文件在/e…...

从样本到序列:枸杞DNA条形码鉴定的关键步骤与陷阱规避

一、引言&#xff1a;为何需要PCR鉴定枸杞&#xff1f;枸杞&#xff08;Lyciumspp.&#xff09;作为药食同源的重要资源&#xff0c;市场长期存在以土库曼枸杞、白刺等近缘种或伪品冒充高价值宁夏枸杞&#xff08;L. barbarum&#xff09;的现象。传统鉴别依赖果实形态和显微特…...

太过负责,是项目经理职场最大的内耗

在项目管理这个行当里&#xff0c;负责常常被当作一种美德。 但凡事过犹不及。当“负责”变成“太过负责”&#xff0c;它就不再是美德&#xff0c;而是一场持续消耗自己的慢性灾难。 一、你分不清“负责”和“扛一切”的界限 “负责”这个词&#xff0c;在项目管理中被过度美化…...

大模型应用开发:从需求分析到上线的全流程指南

一、需求分析&#xff1a;锚定测试视角下的开发方向对于软件测试从业者而言&#xff0c;大模型应用开发的需求分析阶段&#xff0c;核心是跳出传统功能测试的思维局限&#xff0c;从“验证功能正确性”转向“定义AI能力边界”。首先要明确业务场景的核心诉求&#xff0c;比如开…...

RAG我懂你:从架构到知识库构建

导航 传统大语言模型主要依赖参数中的隐式知识进行回答&#xff0c;容易受到知识过期、幻觉和领域知识不足等问题影响。RAG 的核心思想是&#xff1a;在生成答案之前&#xff0c;先从外部知识库中检索相关信息&#xff0c;再将这些信息作为上下文提供给大语言模型&#xff0c;从…...

告别驱动烦恼:用TI官方CCS开发MSP430,为什么比第三方IAR更省心?

嵌入式开发者的效率革命&#xff1a;为什么TI官方CCS是MSP430开发的最优解&#xff1f; 在嵌入式开发领域&#xff0c;工具链的选择往往决定了项目的启动速度和开发体验。对于MSP430系列微控制器的开发者而言&#xff0c;面对IAR、GCC和TI官方的Code Composer Studio(CCS)等多种…...

告别打包失败!Matlab开发者必看:Runtime版本精准匹配与离线部署全攻略

MATLAB Runtime精准匹配与离线部署实战指南 当MATLAB开发者遭遇Runtime版本陷阱 深夜的办公室里&#xff0c;王工程师盯着屏幕上第7次打包失败的红色错误提示&#xff0c;揉了揉酸胀的眼睛。这个场景对许多MATLAB开发者来说并不陌生——明明在自己的R2022b Update 3环境中完美运…...

从蓝桥杯嵌入式真题到项目实战:如何把赛题代码改造成一个可配置的电压监控系统?

从竞赛到实战&#xff1a;构建可配置电压监控系统的嵌入式开发指南 参加过蓝桥杯嵌入式竞赛的同学&#xff0c;往往在赛后会有这样的困惑&#xff1a;那些为比赛而写的代码&#xff0c;真的能在实际项目中复用吗&#xff1f;答案当然是肯定的。本文将带你从第十届蓝桥杯嵌入式真…...

PyTorch模型从GPU‘搬家’到昇腾Ascend:除了装插件,这些性能调优和环境变量你设置对了吗?

PyTorch模型从GPU到昇腾Ascend的深度迁移指南&#xff1a;性能调优与实战陷阱解析 当我们将PyTorch模型从NVIDIA GPU迁移到华为昇腾Ascend平台时&#xff0c;简单的环境安装只是第一步。真正考验开发者功力的&#xff0c;是如何在异构计算架构间实现性能无损甚至提升的迁移。本…...

初次接触Taotoken的新手如何从注册到完成第一次API调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初次接触Taotoken的新手如何从注册到完成第一次API调用 对于初次接触大模型API的开发者而言&#xff0c;从注册平台到成功发出第一…...