uni-app集成的谷歌登录,iOS返回accessToken,Android通过原生插件获取的是idToken值,后期可以优化一下吗?
uni-app集成的谷歌登录,iOS返回accessToken,Android通过原生插件获取的是idToken值,后期可以优化一下吗?
问题描述
App端:
现在框架上集成的谷歌登录,iOS返回accessToken(原生可以得到idToken值)
Android只有openid,unionid(通过getUserInfo可以得到邮箱,昵称等值, 通过原生插件获取的是idToken值)
两个参数值不一样,
accessToken: ya29.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
idToken: eyJhbGcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
对接接口时需要与后台沟通出两套验证逻辑 。。。(原生做App的只需要一套)
后期可以优化一下吗,iOS和Android都返回idToken值
我用的是自有证书,用的firebase,在firebase里面创建Android项目时需要填写sha1值,这个是谷歌登录的时候必须填写sha1值,其他的没有了
回复 Anet: 我这边选完账号以后就没反应了,再点返回就报错了,不知道你有没有遇到过这种情况?
回复 pudding_18: 没有遇到这种情况
我现在拿到谷歌返回的openid,unionid,没有返回accesstoken你们是怎么解决的呀?
如何获取idtoken
您好,我想问一下,我ios接入google登录报错{
“errMsg”: “login:fail 无效的参数,https://ask.dcloud.net.cn/article/282”,
“errCode”: -1,
“code”: -1
},能进入到google的页面,但是登录不了
针对您提到的uni-app集成谷歌登录时,iOS和Android平台返回不同令牌(iOS返回accessToken
,Android通过原生插件返回idToken
)的问题,确实可以通过一些技术手段进行统一处理或优化。以下是一个简要的代码示例和优化思路,旨在展示如何在uni-app中处理这种情况,并确保两端返回的数据格式一致。
1. 统一接口设计
首先,在uni-app中定义一个统一的登录接口,用于处理不同平台的登录逻辑。
// login.js
export function googleLogin() {
return new Promise((resolve, reject) => {
#ifdef APP-PLUS
if (uni.getSystemInfoSync().platform === 'ios') {
// iOS平台使用uni-app提供的API或原生模块获取accessToken
uni.login({
provider: 'google',
success: (res) => {
if (res.code) {
// 假设这里获取到的是accessToken
resolve({ tokenType: 'accessToken', token: res.code });
} else {
reject(res.errMsg);
}
},
fail: reject
});
} else {
// Android平台使用原生插件获取idToken
plus.oauth.getAccessToken({
service: 'google',
success: (e) => {
if (e.access_token) {
// 注意:这里可能需要转换或处理,因为Android原生返回的是idToken
// 假设通过某种方式转换或确认其为有效令牌
resolve({ tokenType: 'idToken', token: e.access_token }); // 这里可能需要根据实际情况调整
} else {
reject(e.msg);
}
},
fail: reject
});
}
#endif
});
}
2. 调用统一接口
在需要登录的地方调用这个统一接口,并根据返回的令牌类型进行后续处理。
// 使用示例
googleLogin().then(({ tokenType, token }) => {
console.log(`Token Type: ${tokenType}, Token: ${token}`);
// 根据tokenType进行后续处理,比如保存到本地或发送到服务器
}).catch(error => {
console.error('Google Login Failed:', error);
});
3. 优化建议
- 令牌转换:如果后端服务要求统一的令牌类型,考虑在客户端或服务端实现令牌转换逻辑。
- 原生插件更新:检查是否有更新的原生插件版本,可能已经解决了令牌类型不一致的问题。
- 文档与注释:在代码中添加详细的注释,说明为何需要进行这样的处理,以便于后续维护。
通过上述方式,您可以在uni-app中实现谷歌登录在iOS和Android平台上的统一处理,确保两端返回的数据格式一致,便于后续的业务逻辑处理。