uniapp 安卓钉钉授权登录如何实现

在uniapp中如何实现安卓端的钉钉授权登录?我按照官方文档配置了appkey和回调地址,但调用dd.oauth时一直返回失败。请问具体需要哪些步骤?是否需要额外配置签名或权限?iOS端正常但安卓总是报错"无效的签名",该如何解决?

2 回复

在uniapp中,使用钉钉授权登录安卓端,需先安装钉钉开放平台插件。通过uni.login获取authCode,再调用钉钉API换取用户信息。记得在钉钉开放平台配置应用签名和包名。


在 UniApp 中实现安卓端钉钉授权登录,可通过以下步骤完成。主要依赖钉钉开放平台的 SDK 和 OAuth 2.0 授权流程。

实现步骤:

  1. 注册钉钉应用
    钉钉开放平台创建应用,获取 appIdappSecret

  2. 集成钉钉 SDK

    • 使用 UniApp 的 uni_modules 插件(如 dingtalk-jsapi)或手动引入钉钉 JSAPI。
    • manifest.json 的「App 模块配置」中勾选「OAuth(登录授权)」。
  3. 前端授权登录代码
    在 UniApp 页面中调用钉钉登录 API:

// 在页面方法中触发登录
ddLogin() {
  // 检查环境是否支持钉钉
  if (typeof dd !== 'undefined') {
    dd.runtime.permission.requestAuthCode({
      corpId: '你的企业 corpId', // 从钉钉开放平台获取
      onSuccess: (result) => {
        const authCode = result.code; // 获取临时授权码
        // 将 authCode 发送到后端
        this.sendAuthCodeToServer(authCode);
      },
      onFail: (err) => {
        console.error('钉钉登录失败:', err);
      }
    });
  } else {
    uni.showToast({ title: '当前环境不支持钉钉', icon: 'none' });
  }
},

// 将 authCode 发送到后端换取用户信息
sendAuthCodeToServer(authCode) {
  uni.request({
    url: '你的后端接口地址',
    method: 'POST',
    data: { code: authCode },
    success: (res) => {
      if (res.data.success) {
        // 登录成功,获取用户信息(如 userid)
        uni.showToast({ title: '登录成功' });
        console.log('用户信息:', res.data.userInfo);
      }
    },
    fail: (err) => {
      console.error('请求后端失败:', err);
    }
  });
}
  1. 后端处理
    后端接收 authCode,调用钉钉 API 换取用户信息:
    • 请求钉钉接口:https://oapi.dingtalk.com/sns/getuserinfo_bycode
    • 参数:tmp_auth_code(即 authCode)、accessKeysecret(从开放平台获取)。

注意事项:

  • 权限配置:在钉钉开放平台配置应用权限和回调域名。
  • 安全机制:后端保存 appSecret,避免前端暴露。
  • 平台兼容性:确保仅在钉钉环境调用 API(可通过 typeof dd 判断)。

通过以上步骤,即可实现 UniApp 安卓端的钉钉授权登录。如需网页授权,可结合 dd.ready 初始化。

回到顶部