android google 登录的坑

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")
    @FormUrlEncoded
    Call<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")
    @FormUrlEncoded
    Call<Token> requestTokenRefresh(
            @Field("refresh_token") String refreshToken,
            @Field("client_id") String clientId,
            @Field("client_secret") String clientSecret,
            @Field("grant_type") String grantType);
@FormUrlEncoded,需要在请求参数那里使用这个注解

原文:https://blog.csdn.net/msn465780/article/details/80765391 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值