uniapp 如何实现google登录-安卓端
uniapp 如何实现google登录-安卓端本文只讲解uniapp安卓端如何获取到idToken来实现登录ios使用uniapp官方方法可以获取海外app貌似最常用的就是邮箱登录在app上表现出来最常用的就是谷歌一键登录或者邮箱加网页验证google登录流程大致如下点击google登录-选择账号-获取到idToken等信息-给到后端-校验并创建自己的token1、官方给的uni.login登录获取不到idToken、serverAuthCode主要是安卓获取不到ios可以获取到不过ios我没有测试constinforef()uni.login({provider:googleasany,success(loginRes){console.log(登录成功,loginRes)info.value.loginResloginRes uni.getUserInfo({provider:googleasany,success(info1){info.value.userInfoinfo1 console.log(获取用户信息成功,info1)},fail(err){console.log(获取用户信息失败,err)info.value.err2err},})},fail(err){console.log(登录授权失败,err)info.value.errerr},})最终可以拿到信息只有以下内容这个是自身的基座运行拿到的数据{loginRes:{authResult:{openid:xxx,unionid:xxx},errMsg:login:ok},userInfo:{userInfo:{headimgurl:https://lh3.googleusercontent.com/a/ACg8ocJErWXFYxbMX6kU6VxErv2PSreD-Lj-Pu8wfOACqXqLBUA9UGo,nickname:m ds,unionid:xxx,openid:xxx,email:xxxxxgmail.com,openId:xxx,nickName:m ds,avatarUrl:https://lh3.googleusercontent.com/a/ACg8ocJErWXFYxbMX6kU6VxErv2PSreD-Lj-Pu8wfOACqXqLBUA9UGo},errMsg:getUserInfo:ok}}里面并没有需要的idToken无法提供给后端完整鉴权校验2、我的实现方式我查到的谷歌登录获取到idToken的方式有两种使用Google Sign-In SDKCredential Manager 我选择的实现方式不过还是使用别人的插件插件地址https://ext.dcloud.net.cn/plugin?id24735这个插件是在官方插件上改版的官方插件有一些问题这个做了部分修改并增加了部分功能不过我在使用过程中还是存在一些问题1、插件获取到登录数据了但是解析失败这个主要是没有对谷歌返回的数据进行分类处理修改插件代码修复解析失败问题// 将以下handleSignIn方法替换原有的handleSignIn方法即可// 原有的代码仅处理了GoogleIdTokenCredential一种情况没有处理CustomCredentialfunhandleSignIn(result:GetCredentialResponse):GoogleLoginSuccess?{valcredentialresult.credentialif(credentialiscom.google.android.libraries.identity.googleid.GoogleIdTokenCredential){validTokencredential.idToken// 验证 Token 并获取用户信息returngetUserFromToken(idToken)}elseif(credentialisandroidx.credentials.CustomCredential){if(credential.typecom.google.android.libraries.identity.googleid.GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL){try{valgoogleIdTokenCredentialcom.google.android.libraries.identity.googleid.GoogleIdTokenCredential.createFrom(credential.data)returngetUserFromToken(googleIdTokenCredential.idToken)}catch(e:Exception){// console.log(Failed to parse GoogleIdTokenCredential, e)returnnull}}}// 处理其他类型的凭证如密码returnnull}插件使用方式// #ifdef APPimport{googleLogin,googleLogout}from/uni_modules/coc-oauth-google// #endiffunctiongoogleLogin_(){googleLogin({serverClientId:xxxxx.apps.googleusercontent.com,// 必填web端idsuccess:(res:any){console.log(success------111--------,res)copy(JSON.stringify(res))},fail:(res:any){console.log(fail-------222-------,res)},complete:(res:any){console.log(complete333,res)},})}拿到的数据如下包含需要使用的idToken{email:xxxxxgmail.com,nickname:xxxx,idToken:xxxxxxx.xxxxxxxx.xxxxxxxx,headimgurl:https://lh3.googleusercontent.com/a/ACg8ocJErWXFYxbMX6kU6VxErv2PSreD-Lj-Pu8wfOACqXqLBUA9UGos96-c,openId:xxxxxxxxxxxxxxxxxxx}3、google登录注意点ClientId必须使用web端ClientId不能使用android端ClientId原因不明只知道必须这样子打包发布到google的应用市场需要修改android凭证的sha-1值4、其他参考的帖子和实现方法https://juejin.cn/post/7514707341381599259?searchId2026033014384525E83260F15128FCB274 这不是我最终的实现方法https://blog.csdn.net/ihchenchen/article/details/132611878 前人踩坑记录
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2467699.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!