接入Google Sdk 遇到的坑

转自:https://blog.csdn.net/msn465780/article/details/80765391

最近在做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。

OK,到这里应该坑都平了,又可以愉快玩耍了。

猜你喜欢

转载自blog.csdn.net/auccy/article/details/112578379