更新记录

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 支持 支持 支持

一、前置条件

  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.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 里注册,用于调试。


五、推荐调用流程

  1. 页面 onLoad:onLogCallback(...)(可选)。
  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. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。