更新记录

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.utsHybrid 三层桥接,支持:

能力 Android iOS HarmonyOS
单图 / 多图分享 支持 支持 支持
视频分享 支持 支持 支持
图文混合(mix) 支持 支持 支持
预填标题、话题 支持 支持 支持
分享结果异步回调 支持 支持 支持
原生日志透传 onLogCallback 支持 支持 支持

一、前置条件

  1. 抖音开放平台 创建移动应用,获取 ClientKey
  2. 为应用申请分享相关能力(如 aweme.share 等),审核通过后方可正常分享。
  3. 包名 / Bundle ID / 鸿蒙 bundleName 与开放平台应用配置一致;签名与平台登记一致(Android 常见 code=-4 与此相关)。
  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.plistCFBundleURLTypes 中增加一条,scheme 值为你的 ClientKey(与抖音回调一致)
LSApplicationQueriesSchemes 建议在工程 manifest.jsonapp-plus.distribute.ios 配置 urlschemewhitelist,否则 canOpenURL 检测抖音可能恒为 false

示例(manifest.json 源码视图,app-plus.distribute.ios 下):

"urlschemewhitelist": "snssdk1128,douyinopensdk,douyinliteopensdk,douyinsharesdk,aweme,douyin"

config.jsonios.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,请在宿主 entrymodule.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.jsonDouyinOpenSDK
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,请检查 urlschemewhitelistInfo.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

持续接收原生层日志(levelinfo / errortag 多为 HlDouyinShare)。适合在 onLoad 里注册,用于调试。


五、推荐调用流程

  1. 页面 onLoadonLogCallback(...)(可选)。
  2. 用户点击「分享」前:initDouyin(clientKey),必要时 isDouyinInstalled() 提示安装抖音。
  3. 使用 uni.chooseImage / uni.chooseVideo 等拿到 tempFilePaths
  4. 调用 shareToDouyin({ clientKey, mediaType, paths, ... }, callback)
  5. 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 同样处理。


附录 B:相关链接

隐私、权限声明

1. 本插件需要申请的系统权限列表:

iOS 需要相册读写权限;Android 需要访问应用私有目录文件并通过 FileProvider 分享

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件会读取你传入的本地图片或视频文件,并调用抖音客户端发起分享

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。