更新记录
1.0.1(2026-04-02)
一、文档更新
1.0.0(2026-04-02)
- 初始版本。
- 支持 Android / iOS /鸿蒙 图片、多图、视频分享到抖音。
平台兼容性
uni-app(4.72)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 鸿蒙插件版本 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | - | - | - | - | 5.0 | 1.0.1 | 13 | 1.0.1 | 12 | 1.0.1 |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.75)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | - | - | - | - |
hl-douyin-share-uts
基于抖音开放平台 OpenSDK 的 uni-app / uni-app x UTS 插件,采用 interface.uts → 各端 index.uts → Hybrid 三层桥接,支持:
| 能力 | Android | iOS | HarmonyOS |
|---|---|---|---|
| 单图 / 多图分享 | 支持 | 支持 | 支持 |
| 视频分享 | 支持 | 支持 | 支持 |
| 图文混合(mix) | 支持 | 支持 | 支持 |
| 预填标题、话题 | 支持 | 支持 | 支持 |
| 分享结果异步回调 | 支持 | 支持 | 支持 |
原生日志透传 onLogCallback |
支持 | 支持 | 支持 |
一、前置条件
- 在 抖音开放平台 创建移动应用,获取 ClientKey。
- 为应用申请分享相关能力(如
aweme.share等),审核通过后方可正常分享。 - 包名 / Bundle ID / 鸿蒙 bundleName 与开放平台应用配置一致;签名与平台登记一致(Android 常见
code=-4与此相关)。 - 使用 App 真机调试;分享需安装 抖音客户端(各端对应版本以开放平台文档为准)。
二、安装与引用
将本插件置于工程 uni_modules/hl-douyin-share-uts/(或通过插件市场安装)。
页面/组件中统一从插件根目录导入(不要直接引用 utssdk/ 下平台文件):
import {
initDouyin,
isDouyinInstalled,
shareToDouyin,
onLogCallback
} from '@/uni_modules/hl-douyin-share-uts'
类型定义可从同路径或 interface.uts 按需导入(类型-only):
import type { DouyinShareRequest, DouyinShareResult } from '@/uni_modules/hl-douyin-share-uts'
三、平台配置(必做项摘要)
插件已将 Android Manifest / iOS 插件 Info.plist / 鸿蒙 HAR 等尽量内置;下列项需按宿主工程补齐。
3.1 Android
| 项目 | 说明 |
|---|---|
| SDK | 插件使用内置 AAR,更新插件后需 重新制作自定义基座 |
| 权限 / FileProvider / 回调 Activity | 由插件 AndroidManifest.xml 合并,一般无需改宿主 |
若分享返回 Not enough permissions(如 code=-4),多为开放平台 未开通对应 scope 或 签名与登记不一致,需在控制台排查。
3.2 iOS
| 项目 | 说明 |
|---|---|
| URL Scheme | 须在宿主 Info.plist 的 CFBundleURLTypes 中增加一条,scheme 值为你的 ClientKey(与抖音回调一致) |
| LSApplicationQueriesSchemes | 建议在工程 manifest.json → app-plus.distribute.ios 配置 urlschemewhitelist,否则 canOpenURL 检测抖音可能恒为 false |
示例(manifest.json 源码视图,app-plus.distribute.ios 下):
"urlschemewhitelist": "snssdk1128,douyinopensdk,douyinliteopensdk,douyinsharesdk,aweme,douyin"
config.json 的 ios.plist / plistJson 亦可合并 LSApplicationQueriesSchemes(与官方文档、本插件 utssdk/app-ios/Info.plist 对齐即可)。
3.3 HarmonyOS
| 项目 | 说明 |
|---|---|
| OHPM 依赖 | @douyin/opensdk-common-external 已以 *`utssdk/app-harmony/libs/.har** 本地方式引入,避免仅走ohpm.openharmony.cn` 导致 404 |
querySchemes |
仅 entry 模块 可声明;插件为 har,请在宿主 entry 的 module.json5 中配置:"querySchemes": ["snssdk1128", "douyinopensdk"] |
App Link 与 redirectUri |
分享完成回跳需与开放平台 鸿蒙开发信息、宿主 EntryAbility skills 中 HTTPS App Link 一致;请求里传 redirectUri(见下文 API) |
可使用工程根目录 harmony-configs/entry/src/main/module.json5 覆盖生成的 entry 配置(具体以当前 HBuilderX 文档为准)。完整示例见下文「附录 A」。
3.4 自包含能力对照
| 平台 | 内容 | 位置 |
|---|---|---|
| Android | queries、FileProvider、DouYinEntryActivity |
插件 AndroidManifest.xml |
| Android | 依赖 | 插件 libs/*.aar + config.json |
| iOS | QueriesSchemes、相册文案 | 插件 Info.plist(若宿主未合并需自行补) |
| iOS | openURL 回调 | Hybrid.swift swizzle |
| iOS | CocoaPods | 插件 config.json → DouyinOpenSDK |
| HarmonyOS | SDK | 插件 libs/opensdk-common-external-0.0.5.har |
| HarmonyOS | querySchemes / App Link |
仅宿主 entry |
四、API 参考
4.1 类型
// 分享请求(interface.uts)
export type DouyinShareRequest = {
clientKey: string
mediaType: string // 'image' | 'video' | 'mix'
paths: string[] // 本地临时路径,可 file:// 开头
title?: string
hashTags?: string[]
state?: string // 自定义透传状态
/** 鸿蒙分享完成回跳 URI,需与 entry App Link、开放平台配置一致 */
redirectUri?: string
}
export type DouyinShareResult = {
code: number // 0 成功,非 0 失败(各端错误码含义见开放平台 / 原生日志)
message: string
data?: UTSJSONObject | null
}
export type DouyinShareResultCallback = (result: DouyinShareResult) => void
export type DouyinLogCallback = (level: string, tag: string, message: string) => void
4.2 initDouyin(clientKey: string): DouyinShareResult
初始化 SDK。同一 clientKey 重复调用会返回「已初始化」成功。
- iOS:首次成功初始化时会安装 openURL 拦截。
- 建议在进入分享相关页时调用至少一次(可与「检查安装」前调用)。
4.3 isDouyinInstalled(): boolean
是否安装抖音(或可唤起)。各端实现不同:Android 包名检测;iOS 为 SDK + canOpenURL 组合;鸿蒙为 createDouYinOpenApi 等。若 iOS 恒为 false,请检查 urlschemewhitelist 与 Info.plist。
4.4 shareToDouyin(request, callback): void
发起分享;callback 在异步结果返回时触发(用户从抖音返回或 SDK 回调)。
mediaType:
| 值 | 行为 |
|---|---|
image |
单图取 paths[0];多图走多图 / 混合逻辑(与原生实现一致) |
video |
使用 paths[0] 作为视频 |
mix |
图片与视频混合,paths 内按顺序准备多个 URI |
鸿蒙:建议传入 redirectUri,与 entry 中配置的 App Link 完全一致(含 path)。
4.5 onLogCallback(callback): void
持续接收原生层日志(level 如 info / error,tag 多为 HlDouyinShare)。适合在 onLoad 里注册,用于调试。
五、推荐调用流程
- 页面
onLoad:onLogCallback(...)(可选)。 - 用户点击「分享」前:
initDouyin(clientKey),必要时isDouyinInstalled()提示安装抖音。 - 使用
uni.chooseImage/uni.chooseVideo等拿到tempFilePaths。 - 调用
shareToDouyin({ clientKey, mediaType, paths, ... }, callback)。 - 在
callback里根据result.code == 0判断成功(UTS 下建议用==,避免===兼容问题)。
六、使用示例
6.1 最小示例(仅分享图片)
<script setup>
import { onLoad } from '@dcloudio/uni-app'
import { initDouyin, shareToDouyin, onLogCallback } from '@/uni_modules/hl-douyin-share-uts'
const clientKey = '你的ClientKey'
onLoad(() => {
onLogCallback((level, tag, msg) => {
console.log(`[${level}][${tag}] ${msg}`)
})
})
function shareOneImage(filePath: string) {
initDouyin(clientKey)
shareToDouyin(
{
clientKey,
mediaType: 'image',
paths: [filePath],
title: '标题',
hashTags: ['话题A', '话题B'],
state: 'page-share-1'
},
(result) => {
if (result.code == 0) {
uni.showToast({ title: '分享成功', icon: 'success' })
} else {
uni.showToast({ title: result.message, icon: 'none' })
}
}
)
}
</script>
6.2 选相册图片再分享
uni.chooseImage({
count: 9,
sourceType: ['album'],
success: (res) => {
const paths = res.tempFilePaths || []
if (paths.length == 0) return
initDouyin(clientKey)
shareToDouyin(
{
clientKey,
mediaType: 'image',
paths,
title: '来自相册',
hashTags: ['uniapp']
},
(r) => console.log('share', r.code, r.message)
)
}
})
6.3 视频
uni.chooseVideo({
sourceType: ['album'],
success: (res) => {
initDouyin(clientKey)
shareToDouyin(
{
clientKey,
mediaType: 'video',
paths: [res.tempFilePath]
},
(r) => { /* ... */ }
)
}
})
6.4 混合资源(先图后视频或多次追加)
// 示例:先选多张图,再选一段视频,mediaType 置为 mix
let paths: string[] = []
// ... chooseImage / chooseVideo 成功后 push 到 paths
shareToDouyin(
{
clientKey,
mediaType: 'mix',
paths,
title: '混合投稿'
},
(r) => { /* ... */ }
)
6.5 鸿蒙补充 redirectUri
与宿主 EntryAbility 里配置的 https App Link 及开放平台 鸿蒙 applink 保持一致:
shareToDouyin(
{
clientKey,
mediaType: 'image',
paths: tempPaths,
title: '标题',
redirectUri: 'https://你的域名/applinking.json'
},
(r) => { /* ... */ }
)
6.6 Options API 页面(非 script setup)
<script>
import { initDouyin, shareToDouyin, onLogCallback } from '@/uni_modules/hl-douyin-share-uts'
export default {
onLoad() {
onLogCallback((level, tag, message) => {
console.log(level, tag, message)
})
},
methods: {
doShare(paths) {
initDouyin('你的ClientKey')
shareToDouyin(
{
clientKey: '你的ClientKey',
mediaType: 'image',
paths
},
(result) => {
uni.showToast({ title: result.message, icon: 'none' })
}
)
}
}
}
</script>
- 七、常见问题
| 现象 | 可能原因 | 处理 |
|---|---|---|
Android code=-4 / 权限类英文提示 |
开放平台 scope / 包名签名 | 控制台检查 aweme.share 等权限与签名 |
| iOS 检测未安装 | 未配置 urlschemewhitelist 或未合并 QueriesSchemes | 配 manifest + 主工程 Info.plist |
| iOS 分享后无回调 | URL Scheme 不是 ClientKey | 修改 CFBundleURLTypes |
#
EntryAbility 中需在 onCreate / onNewWant 调用抖音 SDK 的 douYinOpenSDK.doResult(context, want) 以处理回跳(详见抖音鸿蒙接入文档)。若 callerLocalEntry 与默认不一致,需在对应 Ability 同样处理。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 273
赞赏 2
下载 11517715
赞赏 1902
赞赏
京公网安备:11010802035340号