最近在做Facebook 和google第三方登录,Facebook一气呵成,看着官方文档一步一步走,几乎没啥问题

Facebook登录 文档地址

https://developers.facebook.com/docs/facebook-login     点击打开链接

Facebook登录权限  文档地址

https://developers.facebook.com/docs/facebook-login/permissions    点击打开链接

这个权限文档有啥用呢,比如像获取该用户的email、年龄、性别等,就需要指定相关权限

Google登录  文档地址

https://developers.google.com/identity                            点击打开链接

不管哪种第三方登录,国内国外的,都是通过他们的SDK返回用户相关信息,其中最重要的就是

userId和accessToken,一般的做法就是用这个accessToken再调用自己服务端的接口,我们的服务端

拿到这个accessToken后去验证以及返回用户资料信息给客户端,以后的步骤就和SDK无关了。

接下来看看Google登录的流程

当然前置步骤一定要有,就是审核之类APP之类的,那些照着文档走就可以了,这里主要讲坑,坑,坑

第一个坑,直接复制官方文档代码,获取不到 IdToken,正确代码如下:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().requestIdToken(GradApplication.getGrindrApplication().getString(R.string.server_client_id)).build();

必须加上

.requestIdToken(GradApplication.getGrindrApplication().getString(R.string.server_client_id))

第二个坑,server_client_id从哪来?

https://console.developers.google.com/apis/credentials        点击打开链接

这就是获取的地方,选择相应的App后,选择Credentials(凭据)如图:

一般都有几个server_client_id,但是选哪个呢?

选择web client 对应的最新的那个就可以了

第三个坑,IdToken不是AccessToken,如果我们的后端需要token,就传给他AccessToken,这个坑我搞了很久,

太可恶了,下面看下如何获取AccessToken

官方文档地址:

https://developers.google.com/identity/sign-in/android/offline-access      点击打开链接

需要传几个参数来请求AccessToken,其实官网推荐让后端来请求,但是有时呢人在江湖身不由己,还得客户端请求,

注意一点:client_secret.json从哪来的呢?地址?

https://console.developers.google.com/apis/credentials           点击打开链接

前面贴那张图server_client_id旁边有个下载按钮,下载来后样子如下:

里面有请求需要的参数

第四个坑,https://www.googleapis.com/oauth2/v4/token  这个接口请求老是报错,说invalid_grant_type,

坑死宝宝了,最后知道原因了,请求的时候需要用Content-Type: application/x-www-form-urlencoded,

不能用Content-Type: application/json,

更可恶的是项目用的Retrofit,搞了半天终于设置好了,怎么设置的,如下

@POST("oauth2/v4/token")@FormUrlEncodedCall<Token> requestToken(@Field("client_id") String clientId,@Field("client_secret") String clientSecret,@Field("code") String code,@Field("redirect_uri") String redirectUri,@Field("grant_type") String grantType);@POST("oauth2/v4/token")@FormUrlEncodedCall<Token> requestTokenRefresh(@Field("refresh_token") String refreshToken,@Field("client_id") String clientId,@Field("client_secret") String clientSecret,@Field("grant_type") String grantType);

@FormUrlEncoded,需要在请求参数那里使用这个注解,这2个方法都是获取accessToken的,

一般用第一个方法就可以了,参数位置顺序没有关系的,redirect_uri参数传""就可以了,grant_type参数我传的"authorization_code",官方没说这个参数,应该不传也是可以的,可能是我们自己的业务需求吧

第二个方法需要refreshToken的。OK,到这里应该坑都平了,又可以愉快玩耍了。

android google 登录流程及遇到的坑相关推荐

  1. android google 登录登出接入

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

  2. Android Google登录接入

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

  3. Flutter App上架google play 流程以及遇到的坑(已经解决,App已经发布成功)

    前言:大致流程如下,因为已经上传完了所以可能有些地方没有截图出来,但按照我下面的流程上传到谷歌商店是没问题的,如果没有注册谷歌账号和谷歌开发者账号的话可以点我看我前一篇文档,遇到的坑在最后,如果在过程 ...

  4. 在PHP中创建Google登录页面

    在本文中,我将解释如何在您的PHP网站中集成Google登录. 我们将使用Google OAuth API,这是一种将Google登录名添加到您的网站的简便而强大的方法. 作为Web用户,您可能已经经 ...

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

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

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

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

  7. Android三方登录之google登录

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

  8. (出海必备)Android三方登录之Google登录

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

  9. 将 Google 登录集成到您的 Android 应用中

    以集成了第三方谷歌.facebook SDK的依赖库所写的接入流程 参考文档: https://developers.google.com/identity/sign-in/android/start ...

最新文章

  1. Sherri Sparks
  2. Hadoop应用实战100讲(一)-Hadoop进行文件压缩
  3. aapt2 生成资源 public flag 标记
  4. Nginx模块之SessionSticky
  5. 在哪里定义_创意设计学院举办设计从哪里来,到哪里去”专题讲座
  6. 通过Dapr实现一个简单的基于.net的微服务电商系统(十)——一步一步教你如何撸Dapr之绑定...
  7. (2)vue.js介绍
  8. python3 解析 base64 数据
  9. centos服务器 常用命令
  10. 基于STM32战舰开发板的内部温度传感器实验
  11. mysql evict_SpringBoot+Mybatis+MySQL实现读写分离
  12. 最新解决谷歌浏览器崩溃的方法
  13. 【PhotoScan精品教程】任务四:PhotoScan做空三+CC生成正射、三维建模综合案例
  14. 在socket 中使用域名
  15. VCC AVCC VDD AVDD区别(转载)
  16. python实现快速欧式聚类FEC:fast-euclidean-clustering
  17. 邻域、邻接、通路、连通、连通集、区域概念区分​​​​​​​
  18. 祝你一路顺风_吴奇隆_酷音小伟编曲_C调简单版
  19. 使用seleinum模块动态爬取熊猫直播平台全部的主播房间。
  20. ad19中原理图库添加_altium designer 工程中的原理图库和封装如何提取出来

热门文章

  1. 图像检索:DeepFashion: Powering Robust Clothes Recognition and Retrieval with Rich Annotations
  2. iOS动画进阶(十四)图像IO
  3. 关于MP3的Tag乱码问题
  4. 2021面试题——jQuery面试题总结
  5. 大写汉字转阿拉伯数字c语言,C# 将阿拉伯数字转换为大写中文的代码
  6. 用C语言解决:小明今年12岁,他的母亲比他大20岁,他母亲在几年之后将比他的年龄大一倍,编写一个程序计算出那时他们两人的年龄各多少?
  7. 【活动预告】Cocos2d-x即将首次赴台办沙龙 让你满载而归
  8. Gunicorn部署Flask
  9. python千位分隔符_Python格式字符串带空格的千位分隔符
  10. Java,Js,Sql字符串截取总结