更新记录

1.2.8(2026-09-20)

更新 插件信息

1.2.7(2026-08-24)

调整插件信息

1.2.6(2026-08-24)

支持 iOS 平台通过 publishMedia 和 shareMediaToIm 的 filePaths 传入系统相册 PHAsset.localIdentifier,可直接提交指定的相册媒体;未传时仍打开系统相册选择器。

查看更多

平台兼容性

uni-app(5.08)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本
× × × × × × 5.0 1.0.0 12 1.0.0 12 1.0.0
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(5.08)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序
× × 5.0 1.0.0 12 1.0.0 12 1.0.0 ×

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × × √

tt-douyin-open

抖音开放平台 UTS 原生插件,支持 uni-app x 与 uni-app。提供 初始化(register)、授权登录(login)、媒体投稿(publishMedia) 与私信分享。

推荐 API:使用 publishMedia() 投稿,或使用 shareMediaToIm()、shareLinkToIm()、shareMiniAppToIm() 分享私信。旧 share() 保留兼容,但新项目不应再组合 scene、contentType、useInternalPicker 等历史字段。业务通过 getTTDouyinSDK() 取单例。

📚 官方文档:抖音开放平台 - 移动应用


目录

版本信息

平台 SDK 版本 支持状态
iOS 4.2.4 支持
Android 0.2.0.9 支持
HarmonyOS 0.0.5 支持

接入前必读

  • 仅支持 App 真机环境;请使用自定义基座或云打包后的 App,浏览器和小程序环境不能调用本插件。
  • 必须先在抖音开放平台创建移动应用,并使 ClientKey、Android 包名与签名、iOS Bundle ID、鸿蒙应用信息和当前安装包一致。
  • 调用 login、投稿或私信前必须先成功调用 register;iOS 还必须配置 ClientKey URL Scheme 和相册权限。
  • 投稿、私信、小程序、音乐、POI、贴纸等能力受开放平台 Scope、业务资质和抖音客户端版本限制;首次联调仅使用基础媒体投稿,不要传占位业务数据。
  • success / fail 是抖音完成或取消操作并返回应用后的结果,不表示 share() 调用同步完成。

环境配置

前置条件

  1. 在 抖音开放平台 创建移动应用,获取 ClientKey(代码里 register 的 appid 传此值)。
  2. 按平台在开放平台配置 包名、签名(Android)、Bundle ID(iOS)、鸿蒙应用信息等。

iOS

  1. 编辑 uni_modules/tt-douyin-open/utssdk/app-ios/Info.plist:DouyinAppID、URL Types 的 CFBundleURLSchemes 填写 ClientKey;LSApplicationQueriesSchemes 含 douyinopensdk、snssdk1128 等(以插件内模板为准)。
  2. 使用媒体私信分享或投稿前,需在最终 App 的 Info.plist 添加相册权限:NSPhotoLibraryUsageDescription。
  3. 在应用 生命周期 中接入插件 Hook(TTDouyinSDKHookProxy),保证抖音 SDK 能收到 冷启动与 URL 回调(与 uni 工程 manifest 配置一致即可)。

Android

在开放平台配置 签名与包名;工程需能拉取插件 config.json 中的 AwemeOpenSDK Maven 仓库。其余按 抖音 Android 集成文档 配置 FileProvider、回调 Activity 等。

HarmonyOS

  1. ohpm:项目根 harmony-configs/.ohpmrc 需能访问字节仓库,例如:
registry=https://ohpm.byted.org/repos/ohpm/,http://artifact.bytedance.com/repository/byted-ohpm/
  1. harmony-configs/entry/src/main/module.json5:querySchemes 包含抖音相关 scheme;skills / uris(https applinks) 与代码里 redirectUri 一致;声明 网络权限。完整模板请以 抖音鸿蒙 / OpenHarmony 官方说明 为准。

快速开始

1. 导入插件

uni-app x

import * as douyinSDK from "@/uni_modules/tt-douyin-open";

export default {
  data() {
    return {
      douyin: null as douyinSDK.TTDouyinSDK | null,
    };
  },
  onLoad() {
    this.douyin = douyinSDK.getTTDouyinSDK();
    this.initDouyinSDK();
  },
  methods: {
    initDouyinSDK() {
      /* 见下方「2. 初始化 SDK」 */
    },
  },
};

uni-app

import * as douyinSDK from "@/uni_modules/tt-douyin-open";

export default {
  data() {
    return { douyin: null };
  },
  onLoad() {
    this.douyin = douyinSDK.getTTDouyinSDK();
    this.initDouyinSDK();
  },
  methods: {
    initDouyinSDK() {
      /* 见下方「2. 初始化 SDK」 */
    },
  },
};

2. 初始化 SDK

uni-app x

initDouyinSDK() {
  if (this.douyin == null) return;
  this.douyin.register({
    appid: "你的ClientKey",
    success: () => {
      console.log("抖音初始化成功");
    },
    fail: (err) => {
      console.error("抖音初始化失败", err);
    },
  } as douyinSDK.TTDouyinRegisterOptions);
}

uni-app

initDouyinSDK() {
  if (!this.douyin) return;
  this.douyin.register({
    appid: "你的ClientKey",
    success: () => {
      console.log("抖音初始化成功");
    },
    fail: (err) => {
      console.error("抖音初始化失败", err);
    },
  });
}

API 参考

所有 API 均通过 getTTDouyinSDK() 返回的单例调用。register 成功前调用 login 或 share 会失败并返回 errCode: 101。

API 签名 平台 说明
获取实例 getTTDouyinSDK() Android / iOS / HarmonyOS 返回插件单例;不触发抖音客户端。
初始化 sdk.register(options) Android / iOS / HarmonyOS 注册 ClientKey;必须在登录、投稿或私信前完成。
授权登录 sdk.login(options) Android / iOS / HarmonyOS 拉起抖音授权,成功后返回授权 code。
媒体投稿 sdk.publishMedia(options) Android / iOS / HarmonyOS 推荐 API;投稿三端支持。
私信媒体 sdk.shareMediaToIm(options) Android / iOS 鸿蒙明确返回不支持。
私信链接 sdk.shareLinkToIm(options) Android / iOS 鸿蒙明确返回不支持。
私信小程序 sdk.shareMiniAppToIm(options) Android / iOS 鸿蒙明确返回不支持。
旧分享接口 sdk.share(options) Android / iOS / HarmonyOS 兼容旧版本,新项目不推荐使用。

getTTDouyinSDK()

const sdk = douyinSDK.getTTDouyinSDK();

无入参,返回 TTDouyinSDK。建议在页面或应用启动后保存该实例,并先调用 register。

register(options)

sdk.register(options: TTDouyinRegisterOptions): void
参数 必传 类型 说明
appid 是 string 抖音开放平台的 ClientKey。必须与开放平台登记的 Android 包名及签名、iOS Bundle ID 或鸿蒙应用信息匹配。
success 否 (res) => void 初始化成功回调。
fail 否 (err) => void 初始化失败回调。
complete 否 (res) => void 初始化结束回调,无论成功或失败都会调用。

login(options)

sdk.login(options: TTDouyinLoginOptions): void
参数 必传 类型 说明
state 否 string \| null 业务请求标识;成功时原样返回,建议用于校验和关联请求。
permissions 否 string[] \| null 授权 Scope 列表;未传时默认为 ['user_info']。申请的 Scope 须在开放平台开通。
redirectUri 仅鸿蒙必传 string \| null 鸿蒙 applink 回调地址,必须与 module.json5 配置一致;Android / iOS 传 null。
callerLocalEntry 否 string \| null 鸿蒙回调 UIAbility 名称;未传时为 EntryAbility。
success 否 (res) => void 成功时返回 code 和 state;code 应由服务端换取令牌。
fail / complete 否 回调函数 失败或结束回调。

publishMedia(options)(推荐)

sdk.publishMedia(options: TTDouyinPublishMediaOptions): void

固定执行媒体投稿,不需要传 scene: 'publish' 或 contentType: 'media'。

参数 必传 类型 说明
mediaType 是 'image' \| 'video' \| 'mix' 媒体类型。iOS 内置相册仅支持 image、video;mix 会返回不支持。
filePaths Android / 鸿蒙是;iOS 否 string[] Android 为抖音可读取的绝对路径或 content:// URI;鸿蒙为本地可读路径;iOS 传入时必须为 PHAsset.localIdentifier,不传则直接打开系统相册。
shareId 否 string 抖音 ShareID,用于关联 Webhook 投稿结果;不是打开投稿页的前置条件。
caption 否 TTDouyinPublishCaption 跨端标题与话题;推荐通过 hashtagsJson 传 [{"name":"话题","start":0}],start 是插入原始 text 的位置。
musicId 否 string 抖音侧真实音乐 ID。
publish 否 { mode?, targetPage? } iOS / Android:feed、forwardDaily、编辑页或直达发布页;鸿蒙传非默认值会明确失败。
ios / android / harmony 条件可选 平台专属对象 只在对应平台生效;鸿蒙投稿必须提供 harmony.redirectUri。
success / fail / complete 否但建议传 回调函数 success 仅表示客户端接受了请求,最终发布结果应以 Webhook 为准。

iOS 基础投稿

sdk.publishMedia({
  mediaType: 'video',
  shareId: 'publish_' + Date.now(),
  caption: {
    text: '我的精彩视频',
    hashtagsJson: '[{"name":"美好生活","start":0}]',
  },
  publish: { targetPage: 'edit' },
  success: () => console.log('抖音已接受投稿请求'),
  fail: (err) => console.error(err),
} as douyinSDK.TTDouyinPublishMediaOptions);

iOS 可通过其他原生插件取得 PHAsset.localIdentifier 后传入 filePaths,插件会直接提交给抖音 SDK;不要传本地文件路径。未传时插件会自行打开系统相册。用户从抖音取消后若 SDK 未返回完成事件,插件会在应用重新激活后以 fail / complete 结束本次请求,随后可发起下一次投稿。

Android / 鸿蒙基础投稿

sdk.publishMedia({
  mediaType: 'video',
  filePaths: ['/可读取的视频路径或content-uri'],
  harmony: {
    redirectUri: 'https://你的域名/抖音回调路径',
  },
  fail: (err) => console.error(err),
} as douyinSDK.TTDouyinPublishMediaOptions);

Android 忽略 harmony;鸿蒙必须提供其中的 redirectUri。实际跨端项目应按平台传入各自的媒体路径和鸿蒙配置。

所有平台的复杂嵌套数组均推荐使用 JSON 字符串:caption.hashtagsJson、ios/android.mentionsJson、ios/android.stickersJson,分别对应 TTDouyinPublishHashtag[]、TTDouyinPublishMention[]、TTDouyinSticker[]。不要同时传同名数组字段;其中 iOS 必须使用 JSON 字符串,以避开 UTS 嵌套数组桥接问题。

私信分享(推荐)

shareMediaToIm(options)、shareLinkToIm(options)、shareMiniAppToIm(options) 分别对应媒体、链接、小程序卡片,避免旧接口中 scene 与 contentType 的非法组合。媒体参数的 filePaths 规则与投稿相同:iOS 可传 PHAsset.localIdentifier,不传则打开相册;Android 必传;鸿蒙当前明确不支持私信分享。

share(options)(兼容接口)

sdk.share(options: TTDouyinShareOptions): void
参数 必传 类型 说明
scene 是 'publish' \| 'im' publish 投稿或转发日常;im 私信,鸿蒙不支持。
contentType 是 'media' \| 'link' \| 'microApp' publish 仅允许 media;link 和 microApp 仅允许 im。
mediaContent 条件必传 TTDouyinShareMediaContent contentType: 'media' 时必传。详见下方 TTDouyinShareMediaContent。
linkContent 条件必传 TTDouyinShareLinkContentIM im + link 时必传。
microAppContent 条件必传 TTDouyinShareMicroAppContentIM im + microApp 时必传。
publishMode 否 'feed' \| 'forwardDaily' 仅投稿媒体有效,默认 feed。
publishTargetPage 否 'edit' \| 'publish' 仅 feed 有效,默认 edit。
useNewForwardAbility 否 boolean 仅 forwardDaily 有效;iOS 建议 true。
harmonyLandingPage 否 'edit' \| 'record' 仅鸿蒙投稿有效;record 需要申请 aweme.capture。
state 否 string 请求关联标识;不是打开投稿页的前置条件。
redirectUri 仅鸿蒙必传 string \| null 鸿蒙分享的 applink 回调地址。
callerLocalEntry / androidCallerLocalEntry 否 string \| null 分别覆盖鸿蒙 UIAbility 或 Android 回调 Activity。
success / fail / complete 否但建议传 回调函数 从抖音返回后接收结果;失败时记录完整错误对象。

Options

TTDouyinShareMediaContent

参数 类型 必传 默认值 说明
filePaths string[] Android / 鸿蒙必传;iOS 否 - Android 使用可读取的绝对路径或 content:// URI;鸿蒙使用本地可读路径;iOS 传入时必须是 PHAsset.localIdentifier,不传则打开系统相册。
mediaType 'image' \| 'video' \| 'mix' 否 由路径或相册结果推断 iOS 基础投稿建议显式传 image 或 video,会直接过滤相册类型;mix 当前不支持 iOS 内置相册选择。
useInternalPicker boolean 否 - 已废弃且不再控制行为。iOS 未传 filePaths 时自动打开系统相册;Android 当前使用 filePaths。新项目使用 publishMedia()。
title TTDouyinShareTitle 否 - 投稿标题及话题 / @ 标记。
titleHashtagsJson / titleMentionsJson string 否 - 复杂标题标记的 JSON 字符串;兼容 share() 时推荐使用。
musicParam TTDouyinMusicParam 否 - 抖音侧已配置的真实 musicId。
poiId string 否 - 抖音侧真实 POI 锚点 ID。
feature 'note' 否 - 笔记体裁,需要抖音 30.3+。
microAppInfo TTDouyinShareMicroAppBubble 否 - 已配置小程序的真实信息;首次联调不要传占位值。
stickers TTDouyinSticker[] 否 - 话题、@ 用户、POI 或图片贴纸;必须使用抖音可识别的真实业务数据。
stickersJson string 否 - 贴纸 JSON 数组;兼容 share() 时推荐使用。
background TTDouyinShareBackground 否 - 转发日常的背景色或背景图。

TTDouyinShareLinkContentIM

仅 scene: 'im' 且 contentType: 'link' 使用,以下字段均必传。

参数 类型 说明
linkURLString string 要分享的链接 URL。
linkTitle string 链接标题。
linkDescription string 链接描述。
linkCoverURLString string 链接封面 URL。

TTDouyinShareMicroAppContentIM

仅 scene: 'im' 且 contentType: 'microApp' 使用。

参数 类型 必传 说明
appId string 是 已配置抖音小程序的真实 App ID。
title string 是 小程序卡片标题。
imageID string 是 通过抖音 OpenAPI 获取的小程序封面 ID。
path string 否 小程序落地页路径。
query string 否 小程序落地页参数。

TTDouyinShareTitle 与 TTDouyinMusicParam

类型 参数 必传 说明
TTDouyinShareTitle title 是 投稿正文。
TTDouyinShareTitle shortTitle 否 图文正文上方短标题,需抖音 30.0+。
TTDouyinShareTitle markers 否 hashtag 或 mention 标记,content 为真实话题或 OpenID,start 为标题内位置。
TTDouyinMusicParam musicId 使用音乐时是 抖音侧真实音乐 ID;其它字段不参与当前 iOS 投稿请求。

进阶内容类型

以下类型全部可选。它们需要开放平台已开通对应能力,字段必须是真实数据;不要用占位值验证基础投稿。

类型 参数 必传 说明
TTDouyinShareMicroAppBubble appId、title 使用小程序气泡时是 已配置抖音小程序的 App ID 和展示标题。
TTDouyinShareMicroAppBubble desc、startPageURL 否 小程序描述和完整落地页 URL。
TTDouyinShareBackground topColor、bottomColor、imageUrl 否 背景渐变色或网络背景图。
TTDouyinHashtagSticker name 使用该贴纸时是 抖音话题名称;locationX、locationY 为可选归一化坐标。
TTDouyinMentionSticker openId 使用该贴纸时是 被 @ 用户的真实 OpenID;坐标可选。
TTDouyinPoiSticker poiId 使用该贴纸时是 抖音侧真实 POI ID;坐标可选。
TTDouyinImageSticker path 使用该贴纸时是 Android 为本地图片路径;iOS 优先提供 localIdentifier。大小、时间、偏移、缩放和旋转均可选。

返回与错误

register 成功时返回空对象;login 成功时返回 { code, state };share 成功时返回空对象。失败回调统一为 IUniError,常用字段为 errCode、errMsg;抖音 SDK 原始错误可从 cause.code 和 cause.message 获取。


常用能力示例

抖音授权登录

流程:客户端拿到 code → 服务端用 code 换 access_token → 再取用户信息(见 开放平台服务端文档)。

uni-app x 示例

this.douyin!.login({
  state: String(Date.now()),
  permissions: ["user_info"],
  redirectUri: "https://你的域名/你的path",
  callerLocalEntry: "EntryAbility",
  success: (res) => {
    console.log(res.code, res.state);
  },
  fail: (err) => {
    console.error(err);
  },
} as douyinSDK.TTDouyinLoginOptions);

uni-app 示例

this.douyin.login({
  state: String(Date.now()),
  permissions: ["user_info"],
  redirectUri: "https://你的域名/你的path",
  callerLocalEntry: "EntryAbility",
  success: (res) => {
    uni.request({
      url: "https://你的服务端/api/douyin/login",
      method: "POST",
      data: { code: res.code, state: res.state },
    });
  },
  fail: (err) => {
    uni.showToast({ title: "授权失败", icon: "none" });
  },
});

抖音分享

统一调用:this.douyin.share(options),options 类型为 TTDouyinShareOptions。

能力概览:

  • 投稿发布:三端均支持通过 scene: 'publish' + contentType: 'media' 走抖音 投稿 / 发布 流程(标题、音乐、贴纸、publishMode(feed / forwardDaily)、publishTargetPage(edit / publish)、鸿蒙 harmonyLandingPage(edit / record)等以 interface.uts 为准)。
  • 私信分享:Android / iOS 支持 scene: 'im'(media / link / microApp);鸿蒙 当前不支持 im。

完整必传条件、默认值和数据类型见上方 API 参考;下表汇总投稿媒体字段的组合限制。

参数必填与适用条件

调用任何分享能力前必须先成功调用 register({ appid }),且开放平台中的应用信息必须与当前安装包一致。下表中的“必传”表示插件调用所需;抖音客户端版本、开放平台 Scope 和业务资质仍可能限制最终能力。

参数 必传条件 可选值 / 默认值 说明
scene 始终必传 publish / im publish 为投稿或转发日常;im 为私信,鸿蒙暂不支持。
contentType 始终必传 media / link / microApp publish 只能传 media;link、microApp 只能用于 im。
mediaContent contentType: 'media' 时必传 - 投稿和私信媒体的媒体配置。
linkContent scene: 'im' 且 contentType: 'link' 时必传 - 接口类型要求提供 URL、标题、描述和封面 URL。
microAppContent scene: 'im' 且 contentType: 'microApp' 时必传 - appId、title、imageID 必须是已配置小程序的真实数据。
mediaContent.filePaths Android / 鸿蒙媒体投稿或私信时必传 iOS 可选 Android 使用可读取的绝对路径或 content://;鸿蒙使用本地可读绝对路径。iOS 未传时打开系统相册,传入时必须是 PHAsset.localIdentifier。
mediaContent.mediaType 可选,基础联调强烈建议传 image / video / mix 未传时由路径或相册选择结果推断。iOS 基础投稿请传 image 或 video;mix 当前不走 iOS 内置相册选择。
publishMode scene: 'publish' 时可选 feed(默认)/ forwardDaily feed 为投稿;forwardDaily 为转发到日常,单媒体。
publishTargetPage publishMode: 'feed' 时可选 edit(默认)/ publish edit 是稳定的基础验证入口;publish 依赖抖音客户端版本,建议仅单视频使用。
useNewForwardAbility publishMode: 'forwardDaily' 时可选 iOS 默认 true 映射 iOS SDK 的 useNewShareAbility。iOS 18 及以上不支持视频转发日常。
state 可选 任意业务字符串 用于关联回调和业务记录;不是打开投稿页的前置条件。
redirectUri 鸿蒙登录或分享时必传 Android / iOS 不传 必须与鸿蒙 module.json5 的 applink 配置一致。
androidCallerLocalEntry Android 可选 默认 包名.douyinapi.DouYinEntryActivity 覆盖抖音回调 Activity 的全限定类名。
title、musicParam、poiId、microAppInfo、stickers、background、feature 全部可选 - 进阶能力。首次联调不要传占位值;使用时需要真实业务数据、对应 Scope 和抖音客户端支持。
success、fail、complete 可选但建议传 - 抖音返回应用后才会收到最终结果;排障时请记录 errCode、errMsg、cause.code、cause.message。

平台行为简述:

平台 说明
Android / iOS 支持投稿发布(publish + media)与 私信分享(im)。Android 在从抖音返回应用后才会触发 success / fail,不要在调用 share 的同一同步流程里当作已发布完成。
HarmonyOS 支持投稿发布(publish + media);im 会失败。需 redirectUri、mediaContent.filePaths(本地可读路径,可用选图/选视频返回的路径)。

以下为 投稿发布、私信分享 分端示例;uni-app 与 uni-app x 仅差类型断言,逻辑相同。

投稿发布:Android / iOS(uni-app x)

Android:mediaContent.filePaths 必填(本地绝对路径或 content://,需满足 FileProvider 与抖音可读要求)。
iOS:投稿会先走 系统相册选择;mediaContent 主要配 mediaType、标题、音乐、贴纸 等,其它字段见 interface.uts。

// Android:必须提供 filePaths
this.douyin!.share({
  scene: "publish",
  contentType: "media",
  state: "可选",
  publishMode: "feed",
  publishTargetPage: "edit",
  mediaContent: {
    filePaths: ["/绝对路径/demo.jpg"],
    mediaType: "image",
    title: { title: "作品标题" },
  },
  success: () => {},
  fail: (e) => {
    console.error(e);
  },
} as douyinSDK.TTDouyinShareOptions);

// iOS:以相册选图为主,filePaths 等见 interface.uts
this.douyin!.share({
  scene: "publish",
  contentType: "media",
  state: "可选",
  publishMode: "feed",
  publishTargetPage: "edit",
  mediaContent: {
    mediaType: "image",
    title: { title: "作品标题" },
  },
  success: () => {},
  fail: (e) => {
    console.error(e);
  },
} as douyinSDK.TTDouyinShareOptions);

投稿发布:Android / iOS(uni-app)

// Android
this.douyin.share({
  scene: "publish",
  contentType: "media",
  publishMode: "feed",
  publishTargetPage: "edit",
  mediaContent: {
    filePaths: ["/绝对路径/demo.jpg"],
    mediaType: "image",
    title: { title: "作品标题" },
  },
  success: () => {},
  fail: () => {},
});

// iOS
this.douyin.share({
  scene: "publish",
  contentType: "media",
  publishMode: "feed",
  publishTargetPage: "edit",
  mediaContent: {
    mediaType: "image",
    title: { title: "作品标题" },
  },
  success: () => {},
  fail: () => {},
});

私信分享:Android / iOS(uni-app x)

仅 scene: 'im',鸿蒙不支持。示例为 发单图/单视频给好友;链接、小程序见 linkContent / microAppContent。

this.douyin!.share({
  scene: "im",
  contentType: "media",
  state: "可选",
  mediaContent: {
    filePaths: ["/绝对路径/单张图或单个视频"],
    mediaType: "image",
  },
  success: () => {},
  fail: (e) => {
    console.error(e);
  },
} as douyinSDK.TTDouyinShareOptions);

私信分享:Android / iOS(uni-app)

this.douyin.share({
  scene: "im",
  contentType: "media",
  mediaContent: {
    filePaths: ["/绝对路径/单张图或单个视频"],
    mediaType: "image",
  },
  success: () => {},
  fail: () => {},
});

投稿发布:鸿蒙(uni-app x)

this.douyin!.share({
  scene: "publish",
  contentType: "media",
  state: "业务或开放平台 ShareID",
  redirectUri: "https://你的域名/applink路径",
  callerLocalEntry: "EntryAbility",
  harmonyLandingPage: "edit",
  mediaContent: {
    filePaths: ["/本地绝对路径/demo.jpg"],
    mediaType: "image",
  },
  success: () => {},
  fail: (e) => {
    console.error(e);
  },
} as douyinSDK.TTDouyinShareOptions);

投稿发布:鸿蒙(uni-app)

this.douyin.share({
  scene: "publish",
  contentType: "media",
  state: "业务或开放平台 ShareID",
  redirectUri: "https://你的域名/applink路径",
  callerLocalEntry: "EntryAbility",
  harmonyLandingPage: "edit",
  mediaContent: {
    filePaths: ["/本地绝对路径/demo.jpg"],
    mediaType: "image",
  },
  success: () => {
    uni.showToast({ title: "已发起分享", icon: "none" });
  },
  fail: (e) => {
    uni.showToast({ title: (e && e.errMsg) || "分享失败", icon: "none" });
  },
});

mediaType 为 mix 时:filePaths 需多个路径,具体条数与能力以抖音客户端与开放平台为准。


平台差异

平台 投稿 私信 媒体传递与回调
iOS 支持 feed 与 forwardDaily 支持 filePaths 可不传,插件打开系统相册;传入时使用 PHAsset.localIdentifier。iOS 18 及以上不支持视频转发日常。
Android 支持 feed 与 forwardDaily 支持 媒体 filePaths 必传,使用可读取绝对路径或 content:// URI;从抖音返回应用后才会收到最终回调。
HarmonyOS 支持投稿 不支持 filePaths、redirectUri 必传;redirectUri 必须与 applink 配置一致。

错误码

常见 errCode(详见 utssdk/unierror.uts 中 TTDouyinSDKErrors):

errCode 说明
101 未初始化或初始化失败
201 参数或场景不支持(如鸿蒙缺 redirectUri)
202 缺少有效 mediaContent
203~206 媒体 / 链接 / 小程序参数问题
208 当前平台不支持该能力(如鸿蒙 im 分享)
209 / 210 客户端或抖音版本、媒体类型限制
999 其它错误;errMsg 已包含抖音 SDK 原始错误码与消息,结构化信息仍可从 cause.code / cause.message 读取

建议在 fail 回调中保留完整错误对象。errMsg 适合直接展示或记录,排障日志可同时记录 errCode、errMsg、cause.code、cause.message:

fail: (err) => {
  console.error('抖音 SDK 调用失败', err);
  console.error(err.errCode, err.errMsg, err.cause?.code, err.cause?.message);
}

常见问题

  1. 找不到插件方法
    使用 自定义基座 或正式包,不要用未包含本插件的标准基座。

  2. iOS 登录无响应
    检查 ClientKey、URL Scheme。

  3. Android 授权或分享无回调
    核对开放平台 签名、包名 及文档要求的 回调 Activity 配置。

  4. 鸿蒙 ohpm 安装失败(ECONNRESET 等)
    多为本机访问 ohpm.byted.org 网络问题,需换网络、代理或放行域名;日志里 CaseSensitive 相关 DEBUG 可忽略。

  5. 鸿蒙提示 redirectUri
    与 module.json5 中 applinks(uris) 及开放平台配置保持一致。

更多排障请对照 抖音开放平台文档。


祝您开发愉快! 🎉

隐私、权限声明

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

暂无

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

暂无

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

暂无