uniapp 安卓端谷歌登录如何获取access token

在uniapp开发安卓应用时,如何通过谷歌登录获取access token?我按照官方文档集成了谷歌登录SDK,但回调只返回了idToken和userInfo,没有拿到access token。请问需要额外配置什么参数或权限吗?具体实现代码该如何修改?

2 回复

在uniapp中,安卓端谷歌登录获取access_token需使用uni.login的provider为"google"。登录成功后,在success回调中可获取access_token。示例代码:

uni.login({
  provider: 'google',
  success: function(res) {
    console.log(res.authResult.access_token);
  }
});

注意:需在manifest.json中配置google登录权限和AppID。


在 UniApp 中,安卓端实现谷歌登录并获取 access token 的步骤如下:

1. 准备工作

  • Google Cloud Console 创建项目并配置 OAuth 2.0 凭据。
  • 获取 client_id(Web 应用类型,不是安卓应用类型,因为 UniApp 使用 Google JavaScript 库)。

2. 安装插件

使用 UniApp 官方推荐的 uni-login 或其他支持谷歌登录的插件(如 @dcloudio/uni-login)。

3. 代码示例

// 在页面或组件中引入插件(具体根据插件文档)
// 例如使用 uni-login
export default {
  methods: {
    googleLogin() {
      // 调用谷歌登录
      uni.login({
        provider: 'google',
        success: (loginRes) => {
          // 登录成功,loginRes 包含授权码或 access token
          console.log('登录成功:', loginRes);
          // 通常返回的是授权码(code),需通过后端交换 access token
          const authCode = loginRes.code;
          // 将 authCode 发送到你的服务器,由服务器通过 Google OAuth 2.0 接口获取 access token
          // 示例:uni.request 发送 authCode 到后端
          uni.request({
            url: 'https://your-server.com/exchange-token', // 替换为你的后端接口
            method: 'POST',
            data: {
              code: authCode
            },
            success: (res) => {
              // 后端返回 access token
              const accessToken = res.data.access_token;
              console.log('Access Token:', accessToken);
              // 存储或使用 access token
            },
            fail: (err) => {
              console.error('获取 token 失败:', err);
            }
          });
        },
        fail: (err) => {
          console.error('谷歌登录失败:', err);
        }
      });
    }
  }
}

4. 后端处理

  • 前端获取授权码后,需通过后端调用 Google OAuth 2.0 接口(https://oauth2.googleapis.com/token)交换 access token,避免在前端暴露 client_secret
  • 后端请求示例(使用 Node.js):
    const axios = require('axios');
    const data = {
      code: authCode, // 前端传来的授权码
      client_id: 'YOUR_CLIENT_ID',
      client_secret: 'YOUR_CLIENT_SECRET',
      redirect_uri: 'YOUR_REDIRECT_URI', // 需与 Cloud Console 中配置一致
      grant_type: 'authorization_code'
    };
    const response = await axios.post('https://oauth2.googleapis.com/token', data);
    const accessToken = response.data.access_token;
    

注意事项

  • 安全:不要在前端存储 client_secret,始终通过后端交换 token。
  • 配置:确保 Google Cloud Console 中的 OAuth 2.0 凭据已添加你的应用包名和 SHA-1 指纹(安卓端)。
  • 测试:在本地或真机调试时,使用 Google 提供的测试账号。

如果遇到问题,检查 UniApp 插件文档或 Google OAuth 2.0 文档以获取更新信息。

回到顶部