uniapp 安卓谷歌登录如何获取access_token

在uniapp中,安卓端使用谷歌登录时,如何获取access_token?我已经按照官方文档集成了谷歌登录SDK,能够成功调起登录界面并获取用户信息,但无法找到获取access_token的方法。请问具体应该如何实现?是否需要额外配置或调用特定接口?

2 回复

在 UniApp 中获取 Google 登录的 access_token,可以通过以下步骤实现:

  1. 配置 Google 开发者控制台
    Google Cloud Console 创建项目,启用 Google Sign-In API,并配置 OAuth 2.0 客户端 ID(需填写 Android 应用的包名和 SHA-1 指纹)。

  2. 使用 UniApp 第三方登录插件
    安装 uni-login 或其他支持 Google 登录的插件,或通过 uni.getProvideruni.login 实现:

    uni.login({
      provider: 'google',
      success: (res) => {
        // res.authResult 包含 access_token
        const access_token = res.authResult.access_token;
      },
      fail: (err) => console.error('登录失败', err)
    });
    
  3. 注意事项

    • 确保 Android 应用签名与 Google 控制台配置的 SHA-1 一致。
    • 测试时需使用正式签名或配置调试版 SHA-1。
    • 部分环境可能需要自行封装原生插件实现。

通过以上步骤即可在 Android 端获取 Google 登录的 access_token,用于后续接口调用。


在 UniApp 中实现安卓谷歌登录并获取 access_token,可以通过以下步骤完成。这里使用 Google Sign-In SDK 结合 UniApp 的插件机制实现。

步骤概述:

  1. 配置 Google API 控制台:创建 OAuth 2.0 客户端 ID。
  2. 集成 UniApp 插件:使用支持谷歌登录的插件(如官方或第三方插件)。
  3. 调用登录方法:获取授权码或直接返回 access_token
  4. 验证并获取用户信息(可选)。

详细步骤及代码示例:

1. 配置 Google API 控制台

  • 访问 Google Cloud Console
  • 创建项目并启用 Google Sign-In API。
  • 生成 OAuth 2.0 客户端 ID(应用类型选择“Android”,并填写包名和 SHA-1 证书指纹)。

2. 集成 UniApp 插件

推荐使用官方或社区插件(如 uni-signin 或自定义原生插件)。以下以假设使用一个名为 google-login 的插件为例。

首先,在 manifest.json 中配置插件:

{
  "app-plus": {
    "plugins": {
      "google-login": {
        "client_id": "YOUR_GOOGLE_CLIENT_ID"
      }
    }
  }
}

3. 调用登录方法

在 Vue 页面中,调用插件登录方法获取 access_token

// 在 methods 中定义登录函数
methods: {
  googleLogin() {
    // 假设插件方法为 uni.requireNativePlugin('google-login')
    const googleLogin = uni.requireNativePlugin('google-login');
    
    googleLogin.login((result) => {
      if (result.code === 200) {
        // 成功获取 access_token
        const accessToken = result.access_token;
        console.log('access_token:', accessToken);
        // 后续可发送 accessToken 到服务器验证或直接使用
      } else {
        console.error('登录失败:', result.message);
      }
    });
  }
}

4. 获取授权码并交换 access_token(备选方案)

如果插件只返回授权码,需通过服务器交换 access_token

// 客户端发送授权码到服务器
uni.request({
  url: 'https://your-server.com/auth/google',
  method: 'POST',
  data: {
    code: result.authorizationCode // 从插件获取的授权码
  },
  success: (res) => {
    const accessToken = res.data.access_token;
    console.log('access_token:', accessToken);
  }
});

注意事项:

  • SHA-1 证书:确保在 Google Cloud Console 中配置的 SHA-1 与打包 APK 时使用的证书一致(调试版和生产版不同)。
  • 插件兼容性:不同插件接口可能略有差异,参考具体插件文档调整代码。
  • 安全:不要在前端硬编码敏感信息;access_token 应通过服务器处理,避免直接暴露。

总结:

通过配置 Google API、集成 UniApp 插件并调用登录方法,即可获取 access_token。如果插件支持,可直接返回;否则需通过授权码由服务器交换。实际开发中,建议使用成熟插件(如 uni-signin)以减少兼容性问题。

回到顶部