更新记录
1.0.0(2026-10-29)
- 新增钉钉官方 SDK 授权码获取、统一公共 API 和错误码,以及 Android、iOS、Harmony 原生桥接实现。
- 新增初始化配置校验、能力检测、钉钉安装状态查询及官方 SDK 支持的 App 内 H5 授权降级。
- 新增安全随机 state、回跳匹配、防重放、单活动会话及重复和迟到回执隔离。
- 新增本地取消、授权超时、忙碌保护及 success/fail/complete 至多一次回调控制。
- 新增脱敏诊断日志、版本与环境快照、完整报告一键复制、固定快照分段复制及手动复制回退。
- 新增 uni-app Vue2/Vue3 与 uni-app x Vapor 示例,支持初始化、能力检查、授权、取消及日志查看。
- 新增后端一次性会话、官方授权码换取令牌与用户信息示例,Client Secret 仅由后端配置。
- 新增 Android Maven、iOS CocoaPods Specs 与 Harmony OHPM 固定依赖配置,以及三端接入和验证范围说明。
平台兼容性
uni-app(5.26)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | × | × | √ | × | √ | - | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(5.26)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | √ | - | √ | × |
其他
| 多语言 | 暗黑模式 | 宽屏模式 | 蒸汽模式 |
|---|---|---|---|
| × | × | × | √ |
lizhao-dingtalk · 钉钉授权登录 UTS 插件
介绍
通过钉钉官方 SDK 为 uni-app(Vue2/Vue3)和 uni-app x 的移动 App 提供授权登录,向业务代码交付一次性授权码,由业务后端换码并建立登录态。
已提供 Android、iOS、Harmony 原生桥接实现。Android 已完成原生编译和部分真机验收,Harmony 已完成本地原生编译;iOS 已核验 SDK 仓储并修正已知 Swift 接口,仍待 Apple 编译与真机验收。真实账号授权及各项验证边界见“注意事项”。
功能特色
| 功能 | 用途 | 对应接口或结果 |
|---|---|---|
| 配置与能力检查 | 核对应用配置,区分钉钉已安装、未安装和无法判断 | initDingTalk、getDingTalkCapabilities |
| 官方 SDK 授权 | 取得一次性授权码,由业务后端换码和建立登录态 | loginWithDingTalk 返回 authCode、state、requestId |
| 会话隔离 | 单个活动会话、安全随机 state、严格回跳匹配,隔离重复和迟到回执 | success/fail/complete 至多一次 |
| 取消与超时 | 取消本地等待;超时明确表示外部结果未知 | cancelDingTalkLogin、timeoutMs |
| App 内 H5 降级 | 使用官方 SDK 实际支持的未安装钉钉降级路径 | 能力由 SDK 与平台决定,不等于 Web 平台登录 |
| 脱敏诊断报告 | 复制版本、环境和完整操作轨迹,支持固定快照分段及手动回退 | getDingTalkDiagnostics、示例日志区 |
适合哪些场景
| 场景 | 推荐能力 | 使用边界 |
|---|---|---|
| 移动 App 注册、登录 | 通过钉钉官方 SDK 取得授权码 | 先配置移动应用、回调地址及各端应用标识;后端换码并建立业务会话 |
| 绑定企业账号 | 使用 openid corpid 获取授权范围 |
用户字段取决于钉钉权限和账号状态,不保证取得手机号 |
| 未安装钉钉时授权 | 使用 SDK 实际支持的 App 内 H5 流程 | 需要满足本端 SDK 和系统要求,部分 H5 关闭场景需等待超时或本地取消 |
| 接入排错 | 检查能力并复制完整脱敏报告 | 日志仅在本地保留,不记录原始授权码、state 或 token |
| 其他钉钉能力 | 本插件专注移动 App 授权码获取 | 不包含分享、钉钉内微应用免登、钉钉小程序免登或独立网页扫码登录 |
下载与导入
| 宿主 | 示例代码位置 |
|---|---|
| uni-app | uni_modules/lizhao-dingtalk/example/uniapp/index.vue |
| uni-app x | uni_modules/lizhao-dingtalk/example/uniappx/index.uvue |
从基础到进阶:按业务模块使用
模块一:最小授权路径
示例操作顺序
- 按“注意事项”完成导入、本端原生配置和钉钉后台登记,使用包含本插件的新源基座或安装包打开对应示例。
- 页面中的 Client ID、回调地址初始为空,填写自己的配置后点击“初始化”和“检查能力”。Client Secret 仅由后端配置。
- 完成应用隐私告知后点击“钉钉授权”。体验授权时 state 可留空;真实业务先由后端准备会话,再将后端 state 传入。企业标识权限按实际应用权限选择。
- 页面显示“已取得授权码;尚未建立业务登录态”时,表示 SDK 已取得一次性授权码;后端换码并返回业务会话后才能认定业务登录成功。授权码只在 success 回调内存中交后端,页面不展示或复制。
- “取消等待”只结束本地等待,不代表撤销钉钉授权。未取得可关联回执时按真实超时结果处理;success/fail 后另有 complete 摘要。
- 复现问题后使用底部“一键复制日志”。长报告从固定快照分段,复制失败停留当前段,并提供可见文本框手动复制。完整报告保留版本、环境、原生诊断及本次操作轨迹。
用户阅读并同意应用隐私告知后,再执行初始化和主动授权。Client ID 和回调地址来自自己的钉钉应用,不要把 Client Secret 放入 App。以下代码可放入示例的业务事件函数,导入位置保持不变:
import { initDingTalk, loginWithDingTalk } from '@/uni_modules/lizhao-dingtalk'
const initialized = initDingTalk({
clientId: '替换为真实ClientID',
redirectUri: 'https://your-domain.example/auth/dingtalk/callback'
})
if (initialized.ok) {
loginWithDingTalk({
scope: 'openid',
timeoutMs: 120000,
success: (result) => {
// 仅把result.authCode/state交自己的后端;不要打印、复制或持久化。
uni.showToast({ title: '已取得授权码,待后端登录', icon: 'none' })
},
fail: (error) => {
uni.showToast({ title: error.errCode + ':' + error.errMsg, icon: 'none' })
},
complete: (result) => {
// 此回调不含授权码,可用于结束按钮等待态。
console.log('授权流程结束', result.requestId, result.errCode)
}
})
} else {
uni.showToast({ title: initialized.errMsg, icon: 'none' })
}
上面的输入必须替换为真实配置。完整可操作页面为 uni_modules/lizhao-dingtalk/example/uniapp/index.vue 和 uni_modules/lizhao-dingtalk/example/uniappx/index.uvue;示例不会替业务应用自动向外部服务器发送授权码。
模块二:后端换码和业务会话
随插件交付的 uni_modules/lizhao-dingtalk/server-example/dingtalk.cjs 使用真实官方接口:POST /v1.0/oauth2/userAccessToken 换码,再 GET /v1.0/contact/users/me 读取当前用户,需要 Contact.User.Read 权限。Client Secret 仅由后端环境变量提供,示例不返回钉钉 accessToken/refreshToken 给 App。
安装 Node.js 22 或以上,将环境变量 DINGTALK_CLIENT_ID、DINGTALK_CLIENT_SECRET 配置到运行该服务的环境,再运行:
node uni_modules/lizhao-dingtalk/server-example/server.cjs
此参考服务仅监听本机 127.0.0.1:18731,没有自动部署。生产须接入自己的 HTTPS 网关、会话、数据库与限流。内存会话重启即失效。
使用者后端应配置自己的 DINGTALK_CLIENT_ID 与 DINGTALK_CLIENT_SECRET,前者与 App 中使用的 Client ID 相同。真机中的 127.0.0.1 指向手机本身;这里的本机地址只用于后端参考验证,业务 App 需要调用使用者已部署、可访问的 HTTPS 服务。
- App POST
/auth/dingtalk/prepare,JSON 为{},取得一次性flowToken和state。准备会话有效 300 秒。 - 将收到的
state原样传入loginWithDingTalk;不要用时间戳、固定字符串或本地永久值替代后端 nonce。 - 在 success 中 POST
/auth/dingtalk/login,发送 JSON{flowToken, state: result.state, authCode: result.authCode};这些值只在内存短暂保留,不写日志。 - 服务验证准备会话/state、单次消费,再调用钉钉换码。成功返回独立业务
sessionToken和已验证用户。使用Authorization: Bearer <sessionToken>调用参考服务 POST/session/me。业务账号绑定应由自己的后端完成。
失败后重新准备会话并授权,不自动重复消费旧 authCode。服务端参考的单次消费不能代替业务端的账号绑定、防重放和访问控制。
两个交付示例默认只演示 SDK 授权码获取。业务接入点为 uni_modules/lizhao-dingtalk/example/page.template 的 login 方法及其 success 回调:发起授权前准备后端会话,将后端 state 传入插件;成功后把结果交自己的换码接口。页面中“已取得授权码”表示 SDK 成功,后端返回业务会话之后才能显示业务登录成功。维护示例时改主模板并运行生成器,保持 uni_modules/lizhao-dingtalk/example/uniapp/index.vue 和 uni_modules/lizhao-dingtalk/example/uniappx/index.uvue 同源。
模块三:取消、能力检查和诊断
import { getDingTalkCapabilities, loginWithDingTalk, cancelDingTalkLogin, getDingTalkDiagnostics, clearDingTalkDiagnostics } from '@/uni_modules/lizhao-dingtalk'
const capabilities = getDingTalkCapabilities()
if (capabilities.nativeSupported && capabilities.initialized) {
const requestId = loginWithDingTalk({
fail: (error) => { console.log('流程错误码', error.errCode) },
complete: (result) => { console.log('流程结束', result.requestId, result.errCode) }
})
// 在用户点击“取消等待”或页面卸载时执行;不会撤销钉钉授权。
cancelDingTalkLogin(requestId)
}
const snapshot = getDingTalkDiagnostics()
console.log('脱敏日志条数', snapshot.logs.length)
// 清理插件日志不会取消授权;示例页面缓存/已有报告快照继续保留。
clearDingTalkDiagnostics()
示例的“一键复制日志”包含环境、完整插件快照和保留的操作记录,屏幕仅显示最近摘要。更新快照后从第一段开始;复制失败不推进。页面提供完整报告和可选中文本的手动回退,不自动上传。
API 用途速查
| API | 用途 | 返回值 |
|---|---|---|
initDingTalk(options) |
初始化及校验配置;忙碌期不能更换配置 | DingTalkInitResult |
getDingTalkCapabilities() |
查询平台、SDK、安装三态和可用边界 | DingTalkCapabilities |
loginWithDingTalk(options) |
发起官方授权,异步单次回调 | 请求编号 string |
cancelDingTalkLogin(requestId) |
取消匹配请求的本地等待 | DingTalkCancelResult |
getDingTalkDiagnostics() |
取得脱敏日志和原生快照 | DingTalkDiagnostics |
clearDingTalkDiagnostics() |
清理插件日志,保留活动会话 | void |
初始化参数和结果
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| clientId | string | 是 | 钉钉移动应用ID,1–128字符,须符合URL scheme语法 | 无 | 钉钉后台真实值 |
| redirectUri | string | 是 | HTTPS授权回调地址,无fragment和userinfo | 无 | 后台登记值 |
| iosBundleId | string | 否 | 与运行包真实Bundle ID核对,不修改应用标识 | 读取实际值 | iOS |
| harmonyAbilityName | string | 否 | 接收回跳的宿主Ability名称 | EntryAbility | Harmony |
DingTalkInitResult 含 ok:boolean、initialized:boolean、errSubject:string、errCode:number、errMsg:string、platform:string、sdkVersion:string。初始化失败不抹除仍在等待的旧会话;以本次 ok 判断配置是否成功。
登录参数、回调和取消
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| scope | string | 否 | 权限范围,传未URL编码的字符串 | openid | openid、openid corpid |
| state | string | 否 | 一次性会话值;最多512个UTF-16字符且UTF-8不超过1024字节,无控制符 | 原生安全随机生成 | 后端nonce |
| timeoutMs | number | 否 | 等待时限,整数毫秒;系统挂起时回调可能延后 | 120000 | 10000–600000 |
| success | function | 否 | 真实授权码回执,至多一次 | 无 | (DingTalkLoginSuccess) => void |
| fail | function | 否 | 明确失败,至多一次 | 无 | (DingTalkFail) => void |
| complete | function | 否 | 在success/fail后调用,回调抛异常也不跳过 | 无 | (DingTalkCompleteResult) => void |
| requestId | string | 取消时是 | 原样使用login返回值,仅取消匹配活动请求 | 无 | cancelDingTalkLogin参数 |
DingTalkLoginSuccess 含 errSubject、errCode=0、errMsg、requestId、platform、authCode、state,字符串字段不得当用户身份使用。DingTalkCompleteResult 仅含前五个摘要字段,没有授权码。DingTalkFail 另含 nativeCode、nativeType、nativeCause、nativeStack;原生未提供时明确 unknown。
DingTalkCancelResult 含 errSubject/errCode/errMsg/requestId 和 cancelled:boolean。false 代表没有匹配会话或发生错误,应同时看 errCode;true 表示本地确实取消,原 login 接着收到 9358010 和 complete。未安装钉钉时允许 SDK 尝试 H5,具体能力见快照。
能力、诊断与生命周期
DingTalkCapabilities 含 platform、nativeSupported、initialized、installed(installed/notInstalled/unknown)、sdkVersion、packageName、nativeBuildId、canFallbackToWeb 和 limitations:string[]。原生能力可用不代表开放平台配置、网络或用户授权已经通过。
DingTalkDiagnostics 含 pluginId、pluginVersion、buildId、generatedAt、platform、logs:string[]、droppedLogs:number、nativeSnapshot:string。插件版本从 package 自动生成;报告的源码构建标记不冒充使用者安装包的 HX/原生基座版本。无法取得的环境值标记 unknown 和来源。
一次只允许一个活动请求。自定义 state 在本进程不可复用,最多记录1024个摘要,达到上限后可省略 state 使用原生随机路径;生产业务也应在后端限制会话与重放。进程被回收后旧页面回调不能恢复,应重新发起。无持续事件监听,也不需要订阅释放;页面卸载可取消本页仍在等待的请求。
错误码说明
所有业务错误的 errSubject 固定为 lizhao-dingtalk。0 表示当前 API 成功;授权成功并不表示后端登录已成功。
| 错误码 | 含义 | 处理建议 |
|---|---|---|
| 9358001 | 参数无效或state不可复用 | 核对范围,重新准备会话 |
| 9358002 | 平台不支持 | 使用受支持的App,Web/小程序明确失败 |
| 9358003 | 未初始化 | 隐私同意后先初始化 |
| 9358004 | 应用/SDK/回跳配置无效 | 核对原生依赖、URL scheme、包名/签名及实际应用标识 |
| 9358005 | 已有请求等待或忙时更换配置 | 等待原请求结束或取消本地等待 |
| 9358006 | 客户端和降级不可用 | 检查SDK能力、已安装客户端和H5配置 |
| 9358007 | 无法发起授权 | 检查前台Activity/控制器、网络与原生诊断 |
| 9358008 | 用户拒绝授权 | 尊重用户选择,按需重新发起 |
| 9358009 | 用户取消授权 | 仅在SDK明确取消回执时返回 |
| 9358010 | 已取消本地等待 | 不代表撤销外部授权或关闭外部页面 |
| 9358011 | 等待超时,结果未知 | 释放本地等待;重新授权前建立新会话 |
| 9358012 | state缺失、不匹配或旧回跳 | 原生忽略不相关回跳并记诊断,不结束不同的新请求;胶水关联回执不一致会fail |
| 9358013 | 原生调用或SDK错误 | 结合脱敏nativeCode/type/cause/stack检查 |
| 9358014 | 桥接、序列化或回执无效 | 核对插件源码、基座和资源是否匹配 |
用户切回 App 不等于取消;部分 SDK H5 关闭时没有取消回执,将继续等待到超时。未知错误不能转换成成功或空授权码。
注意事项
导入与示例注册
保留完整 uni_modules/lizhao-dingtalk/ 目录复制到项目,页面只从 @/uni_modules/lizhao-dingtalk 导入。当前是源码交付,没有可用市场下载地址,不要拆出内部文件或跨插件引用。
- uni-app:将
uni_modules/lizhao-dingtalk/example/uniapp/index.vue注册到pages.json,路由省略扩展名。示例为选项式 API,兼容 Vue2/Vue3。 - uni-app x:注册
uni_modules/lizhao-dingtalk/example/uniappx/index.uvue,使用script setup,适用于 Vapor。导航栏标题建议“钉钉授权登录”。 - 两页由
uni_modules/lizhao-dingtalk/example/page.template生成;纯 JS 报告放在uni_modules/lizhao-dingtalk/static/report.js,原始报告位于uni_modules/lizhao-dingtalk/example/report.uts。维护源码后运行项目脚本node scripts/build-dingtalk-examples.cjs,再用--check核对。 - 原生依赖和生命周期需要重新原生联编或重打自定义基座。标准基座及旧基座不能仅靠 WGT 增加 SDK。
应用配置清单
插件不附带可供使用者共用的钉钉应用。示例中的 Client ID 和回调地址初始为空,由使用者使用自己的钉钉移动应用配置填写。文中的“替换为真实”以及 your-domain.example 都是待替换的说明值。
| 配置项 | 从哪里取得 | 填写位置与核对方式 |
|---|---|---|
| Client ID | 钉钉开放平台对应移动应用的“凭证与基础信息” | 示例页“Client ID”输入框,或 initDingTalk({ clientId });不是 Client Secret |
| HTTPS 回调地址 | 使用者在钉钉应用“接入登录”中登记的地址 | 示例页“回调地址”输入框,或 initDingTalk({ redirectUri });使用同一已登记地址,不带 #、账号或密码 |
| Android 包名与签名 | 实际基座或正式安装包的包名及签名信息 | 钉钉后台 Android 接入配置;以本次安装包为准,调试签名与发行签名不同需分别核对 |
| iOS Bundle ID 与 URL Scheme | 实际 iOS 安装包的 Bundle ID;Scheme 使用上面的真实 Client ID | 钉钉后台登记 Bundle ID,并在 uni_modules/lizhao-dingtalk/utssdk/app-ios/Info.plist 合并自己的 Scheme,详见下节 |
| Harmony Bundle Name / Identifier | 使用者鸿蒙应用的 Bundle Name 和 appIdentifier |
在钉钉后台登记,Identifier 使用 appIdentifier,不能替换成 appId;宿主查询白名单和回跳 Ability 按下节配置 |
| Client Secret | 同一钉钉应用的服务端凭证 | 仅由使用者后端通过环境变量保存,不填写到示例、UTS 配置或 App 代码 |
| 业务登录服务地址 | 使用者自己的后端服务 | 在业务接入代码中调用 prepare/换码接口,与上面的 SDK 回调地址用途不同 |
redirectUri 用于 SDK 的钉钉配置校验;App 回执由原生 Activity、URL Scheme 或 Want 返回。不要以该 HTTPS 地址是否收到请求作为 SDK 授权完成的判断依据,业务状态以 success/fail/complete 为准。
Android 配置
最低 Android API 21。固定 Maven 依赖 com.alibaba.android:ddopenauth:1.5.0.10 自动解析,不需要手动复制 AAR。uni_modules/lizhao-dingtalk/utssdk/app-android/AndroidManifest.xml 包含 INTERNET、钉钉精确包查询和回跳别名,不申请全量应用列表、通讯录或存储权限。
在钉钉后台登记最终应用包名和签名;使用自定义基座时,后台登记必须与实际安装包一致。Manifest 会将 ${applicationId}.ddauth.DDAuthActivity 映射到插件回调 Activity,不要再在宿主添加同名 Activity。SDK H5 页面由官方依赖合并。
iOS 配置与依赖门槛
最低 iOS 12.0,官方 SDK 为 ADTOpenAuthSDK 0.0.1.16。插件已配置自有索引 LZDingTalkOpenAuth,原生模块仍为官方 ADTOpenAuthSDK。公开 Specs 来源为 钉钉 SDK 索引,仓储目录 https://env-00jxu7ha8amh.normal.cloudstatic.cn/lizhao-dingtalk/。2026-10-28 已通过原版 CocoaPods Core 从空缓存发现和解析固定版本,再由原版 Downloader 实际下载、SHA-256 校验并解压官方 SDK,核对 19 个文件及资源路径。这些检查不等于完整 pod install、Apple 编译或真机授权成功。
保留原生配置后,联编或云打包时从仓储解析固定依赖,SDK 直接取自钉钉官方归档,不需使用者另行上传索引或手动复制 XCFramework。native-sdk-repositories/dingtalk-ios/ 是项目维护材料,不参与客户端授权。Podspec 为 Objective-C 链接配置 -ObjC;dependencies-pod-resources=app 把 SDK H5 返回图标放入主应用资源。
依赖配置位于 uni_modules/lizhao-dingtalk/utssdk/app-ios/config.json。URL 查询列表位于 uni_modules/lizhao-dingtalk/utssdk/app-ios/Info.plist。接入时还须合并自己的 URL Scheme:
<key>CFBundleURLTypes</key>
<array><dict>
<key>CFBundleURLName</key><string>dingtalk</string>
<key>CFBundleURLSchemes</key><array><string>替换为真实ClientID</string></array>
</dict></array>
把上述 CFBundleURLTypes 合并到该文件现有的 <dict> 中,保留钉钉查询白名单和其他插件配置,不用这段内容替换整个 Info.plist。Scheme 必须等于同一应用的真实 Client ID。修改 Scheme 后重新原生联编或打包;只修改页面输入框不能改变安装包已注册的 Scheme。
实际 Bundle ID 必须与钉钉后台一致;iosBundleId 仅用于额外核对,不修改宿主标识。UTS 生命周期代理自动转发本插件 URL,不需要修改 AppDelegate。原生桥在 SDK 未接入时返回 9358004,能力中的 nativeSupported=false。
Harmony 配置
固定依赖为官方 OHPM @dingtalk/openauth:1.1.0,配置在 uni_modules/lizhao-dingtalk/utssdk/app-harmony/config.json。SDK 要求 Harmony API 15 及以上;本轮 HBuilderX 5.33 的 Vapor 运行库要求 API 20,因此实际最低版本须取 SDK 与当前宿主运行库要求中的较高值。后台登记应用 appIdentifier,不能用 appId 代替。回跳 Ability 默认 EntryAbility,更改宿主 Ability 名称时使用 harmonyAbilityName。
插件使用真实 ArkUI 组件承载官方授权页,处理 onCreate / onNewWant 的授权回执。还须配置宿主查询白名单和可回跳的 Ability:
- 宿主已有
harmony-configs/entry/src/main/module.json5时,在其完整内容中合并。没有时,从当前 HBuilderX、当前项目及实际渲染模式生成的完整 Harmony 原生工程复制entry/src/main/module.json5到这个位置。此文件由宿主构建生成,不是随插件交付的文件。 - 在完整文件的
module.querySchemes数组追加并去重dingtalk;保留原有 scheme。核对最终权限包含ohos.permission.INTERNET。插件uni_modules/lizhao-dingtalk/utssdk/app-harmony/module.json5已声明网络权限,查询白名单必须放在宿主 entry 清单。 - 在
module.abilities中定位实际回跳 Ability,设置该项exported=true,保留其srcEntry、skills、页面、资源及其他字段。该入口接收外部 Want,插件会校验官方 action 和会话 state。 - 需要调整宿主
harmony-configs/build-profile.json5时,同样从完整现有或本次生成文件合并,仅提高实际目标 product 的兼容 SDK,保留产品、模块及签名引用;已有更高版本不降低。当前 Vapor 至少 API 20,传统 Vue3 至少 API 15。
harmony-configs 是整文件覆盖,不是字段合并。不能把只有 querySchemes 的片段保存成完整清单,也不能复制插件 HAR 清单或其他宿主的清单代替。打包后再次核对完整 entry 配置和 product;当前两项目没有自动生成这两个宿主配置文件。
本轮生产 ETS、真实 OHPM、独立未签名 HAP,以及 uni-app x Vapor / uni-app Vue3 的实际生成 UTS 与对应运行库 HAR 联编通过,保留原始 ArkTS 告警。Vue2 Harmony 在本机因缺少平台编译插件未完成;设备授权、H5 回退及完整宿主运行仍待验收。用户关闭 H5 时 SDK 不保证给取消回执,本地会继续等待至显式取消或超时,不把页面返回视为授权取消。
平台与验证范围
| 平台/宿主 | 配置状态 | 兼容性与验证边界 |
|---|---|---|
| HBuilderX / uni-app / uni-app x | 最低 5.33 | 使用对应版本的编译器与运行库;未验证更早版本 |
| uni-app Vue2/Vue3 | 支持 | 保留完整根入口、公开类型和选项式 vue 示例;nvue 未提供适配,Harmony 已编译范围为 Vue3 |
| uni-app x / Vapor | 支持 | 提供 setup 示例,Android 已进行完整宿主的本地功能验收;其他平台边界分别见下 |
| Android | 支持 | 插件原生层最低 API 21;最终系统门槛取宿主与插件要求的较高值,本次 Vapor 真机基座为 API 24 起。真实 Maven SDK、独立 Debug/Release/R8 及 x/Vue2/Vue3 生成 Kotlin 已联编;MI 8 上初始化、取消、超时、回跳隔离、生命周期及系统剪贴板已验,真实钉钉账号授权成功仍待验收 |
| iOS | 待确认 | 插件部署目标为 iOS 12.0,实际还须满足宿主要求。Swift 源码、URL hook 和 Specs 已配置,官方 SDK 身份、仓储解析与资源生成已检查;Apple SwiftCompile、链接及设备授权仍未完成,暂不标已确认支持 |
| Harmony | 支持 | SDK 最低 API 15;当前 Vapor 宿主至少 API 20,传统 Vue3 至少 API 15。真实 OHPM、生产 ETS 独立 HAP、行为回归及 Vapor/Vue3 的 HAR 已验证;保留 ArkTS 告警,Vue2 编译和完整宿主设备授权仍待验收 |
| Web | 不支持 | 不提供独立网页 OAuth;SDK 的 App 内 H5 降级不等于支持 Web 平台,可在 Web 预览示例的失败与报告处理 |
| 小程序 / 快应用 | 不支持 | 不提供钉钉或其他小程序免登,也不提供快应用授权 |
| uniCloud 云端插件 | 不支持 | 随附的是独立 Node.js 后端参考,不声明为 uniCloud 云端插件 |
平台元数据使用 √ 表示支持、x 表示不支持、- 表示待确认;当前 iOS 保留 -。支持标记不代表已完成所有系统版本和真实账号业务验收。示例暂不声明暗黑模式、多语言和宽屏适配。业务验收需要已审批的 Client ID、回调地址、各端应用登记信息、真实用户主动授权及匹配新源的安装包;本插件不包含钉钉分享能力。
隐私、配置与发布
不把 Client Secret、钉钉 token、原始授权码、原始 state 或个人资料写进客户端配置、控制台、崩溃日志或诊断。后台应验证一次性会话,将钉钉用户身份映射自己的账号。官方第三方 SDK 的隐私政策与权限须在业务隐私告知中说明,插件不会自动同意授权。
新增或修改原生源码、SDK、Manifest、Info.plist、Harmony配置后必须重新原生联编或重打对应自定义基座;WGT/appResource 不能更新旧 Native。iOS 需 Apple 工具链实际验证SDK依赖和Swift;Harmony需正确SDK及签名环境。
示例报告只在内存保留,容量1000条/1MiB UTF-8,包含丢弃数量;公共诊断另有240条/64Ki字符上限,原生上限见快照。报告脱敏失败不应改变授权业务结果。系统剪贴板和真机展示需要在实际目标设备检查;模拟复制回执或静态守卫不能代替系统验收。
作者系列 UTS 插件
以下为统一清单中已核实的作者插件;本候选插件未列为已发布。
| 插件 | 能力方向 | 插件市场 |
|---|---|---|
lizhao-app-keepalive |
应用保活、唤醒、自愈与报告 | 查看插件 |
lizhao-bg-audio |
背景音频播放、队列、倍速与事件 | 查看插件 |
lizhao-ble |
BLE 扫描、连接、读写、通知与自动重连 | 查看插件 |
lizhao-call-kit |
电话、短信、通讯录原生能力 | 查看插件 |
lizhao-camera-pro |
原生相机、拍照录像、水印与媒体保存 | 查看插件 |
lizhao-cast-screen |
DLNA 投屏、AirPlay 路由入口 | 查看插件 |
lizhao-choose-file |
原生文件选择、上传、进度与取消 | 查看插件 |
lizhao-device-id |
设备标识、隐私策略与诊断 | 查看插件 |
lizhao-doc-corrector |
文档扫描、矫正、增强与识别 | 查看插件 |
lizhao-emu-detect |
模拟器环境检测、风险评分与证据 | 查看插件 |
lizhao-float-window |
悬浮窗、画中画、权限与诊断 | 查看插件 |
lizhao-gallery-pro |
相册媒体分页、筛选、缩略图与导出 | 查看插件 |
lizhao-hce-card |
NFC 虚拟卡、APDU 交互与 NDEF 标签模拟 | 查看插件 |
lizhao-health |
健康数据授权、查询、统计与写入 | 查看插件 |
lizhao-http-server |
本地 HTTP 服务、文件传输与实时通信 | 查看插件 |
lizhao-icon-pro |
SVG 图标组件、多主题与缓存 | 查看插件 |
lizhao-id-photo |
证件照制作、尺寸换算、换底色与模板换装 | 查看插件 |
lizhao-img-eraser |
图片去水印、局部修复与原生编辑器 | 查看插件 |
lizhao-live-activity |
实时活动、系统胶囊与普通通知降级 | 查看插件 |
lizhao-nfc-pro |
NFC 标签读写、NDEF、IsoDep 与诊断 | 查看插件 |
lizhao-notify-pro |
本地通知、点击动作、进度与定时提醒 | 查看插件 |
lizhao-novel-reader |
原生小说阅读、仿真翻页与段落评论 | 查看插件 |
lizhao-office-view |
Office 与 PDF 文件预览、进度与缓存管理 | 查看插件 |
lizhao-pdf-pro |
PDF 阅读、签批、真实写回与页面处理 | 查看插件 |
lizhao-scan-pro |
原生扫码、连续扫码、相册识别 | 查看插件 |
lizhao-serial-port |
路径串口、USB 串口、多会话收发与诊断 | 查看插件 |
lizhao-share-plus |
系统分享、远程文件下载后分享 | 查看插件 |
lizhao-smart-tts |
系统 TTS、云端合成、听书方案 | 查看插件 |
lizhao-sqlite-pro |
原生 SQLite、迁移、备份与诊断 | 查看插件 |
lizhao-sse-pro |
SSE、Line、JSONL 与 Raw 流式请求 | 查看插件 |
lizhao-tcp-pro |
TCP 客户端、服务端、多连接与诊断 | 查看插件 |
lizhao-usb-storage |
U 盘、移动硬盘文件浏览、读写与批量复制 | 查看插件 |
lizhao-video-editor |
视频裁剪、压缩、取帧与 FFmpeg/FFprobe | 查看插件 |
lizhao-video-feed |
短视频上下滑、短剧选集与分页加载 | 查看插件 |
lizhao-video-player |
原生视频播放器、清晰度与播放交互 | 查看插件 |
lizhao-video-thumb |
视频封面、批量取帧与 Base64 返回 | 查看插件 |
lizhao-vpn-pro |
企业 VPN、IKEv2、安全接入与脱敏诊断 | 查看插件 |
lizhao-wechat-kit |
微信登录、分享、支付、小程序与客服 | 查看插件 |

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 6486
赞赏 5
下载 12726489
赞赏 1958
赞赏
京公网安备:11010802035340号