更新记录
1.0.1(2026-09-30)
更新插件信息
1.0.0(2026-09-30)
支持 穿山甲短剧组件
平台兼容性
uni-app x(5.26)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|
| × | × | 7.0 | 1.0.0 | 12 | 1.0.0 | × | × |
其他
| 多语言 | 暗黑模式 | 宽屏模式 | 蒸汽模式 |
|---|---|---|---|
| × | × | × | √ |
tt-djx-standard
用于 uni-app x App 的穿山甲短剧标准组件,支持 VDOM 与 Vapor,包含滑滑流、聚合页、短剧 API 和原生弹窗。
支持能力:
- 页面内嵌组件:
tt-djx-draw(滑滑流)和tt-djx-home(聚合页)。 - 短剧列表、推荐、分类、搜索、收藏、观看记录和分集解锁状态等 API。
- 原生详情播放页,以及通过 API 打开的独立滑滑流和聚合页。
- SDK 广告与业务侧自定义激励视频解锁。
- 可显示在短剧原生页面上的 Loading、Toast 和确认提示框。
tt-djx-standard与tt-djx-compat都包含原生短剧 SDK,同一项目只能安装其中一个。
与 API 插件的区别
组件版包含完整短剧 API,并额外提供可嵌入业务页面的滑滑流和聚合页。API 插件的 openDraw()、openHome() 只能打开独立原生页面。
| 能力 | tt-short-djx API 插件 |
tt-djx-standard 标准组件 |
tt-djx-compat 兼容组件 |
|---|---|---|---|
| 列表、搜索、收藏、播放页等 API | 支持 | 支持 | 支持 |
| 打开独立原生滑滑流 / 聚合页 | 支持 | 支持 | 支持 |
| 在业务页面内嵌滑滑流 | 不支持 | 支持 | 支持 |
| 在业务页面内嵌聚合页 | 不支持 | 支持 | 支持 |
| 作为 tabBar 子页面内容 | 不支持内嵌 | 支持 | 支持 |
| 适用技术栈 | uni-app / uni-app x | uni-app x VDOM / Vapor | uni-app App-nvue |
如果只需要通过 API 打开独立原生页面,不需要页面内嵌组件,可以购买 穿山甲短剧 API 插件;需要把短剧内容放进现有页面、tabBar 或指定尺寸区域时,选择组件插件。
标准组件快速使用
组件宽高由外层布局决定,可用于普通页面或 tabBar 子页面。
<template>
<view class="container">
<tt-djx-draw class="drama" @load="onLoad" @error="onError" />
</view>
</template>
<style>
.container, .drama { flex: 1; width: 100%; }
</style>
聚合页使用 tt-djx-home。API 导入示例:
import { createShortDrama } from '@/uni_modules/tt-djx-standard'
const shortDrama = createShortDrama()
shortDrama.showLoading({ title: '加载中…', mask: true })
shortDrama.showToast({ title: '加载完成' })
组件挂载前初始化广告
组件挂载时会自动初始化短剧 SDK,不需要业务侧调用 createShortDrama()。因此必须在组件首次渲染前创建并保留一个 UniAd 激励视频实例,用于触发 UniAd/GroMore 初始化,否则可能出现 -9001。SDK 广告和自定义广告模式都需要完成这一步;只有自定义广告模式需要业务侧主动加载和展示该实例。初始化必须在用户同意隐私协议之后执行。
let rewardedVideoAd: RewardedVideoAd | null = null
function initShortDramaAd() {
if (rewardedVideoAd != null) return
rewardedVideoAd = uni.createRewardedVideoAd({
adpid: '当前应用的激励视频广告位 ID'
})
rewardedVideoAd?.onError((error) => {
console.error('UniAd 初始化失败', error)
})
}
请在隐私授权完成后、包含短剧组件的页面显示前调用 initShortDramaAd()。这里仅用于初始化 UniAd/GroMore,不需要主动调用 show()。
标准组件参考
tt-djx-draw 滑滑流组件
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
adSiteId |
string |
'' |
穿山甲媒体 ID;为空时读取 SDK_Setting.json。 |
channelType |
'recommend' \| 'theater' \| 'recommendTheater' |
'recommend' |
滑滑流频道类型。 |
hideChannelName |
boolean |
false |
是否隐藏频道名称 / 顶部频道 tab。 |
hideDramaInfo |
boolean |
false |
是否隐藏底部短剧信息;当前仅 Android 生效。 |
hideDramaEnter |
boolean |
false |
是否隐藏进入短剧详情的入口。 |
enableRefresh |
boolean |
true |
是否允许刷新;当前仅 Android 生效。 |
dramaFree |
number |
1 |
滑滑流场景的免费集数。 |
topDramaId |
string |
'0' |
置顶短剧 ID,传 '0' 表示不指定。 |
freeEpisodeCount |
number |
1 |
进入详情播放页后的前置免费集数,范围 1-20。 |
unlockEpisodeCount |
number |
1 |
每次激励视频解锁的集数,范围 1-10。 |
unlockAdMode |
'sdk' \| 'custom' |
'sdk' |
SDK 内置广告或业务侧自定义广告。 |
嵌入组件没有独立页面关闭按钮,因此内部固定 hideClose: true,不对外提供 hideClose 属性。
tt-djx-home 聚合页组件
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
adSiteId |
string |
'' |
穿山甲媒体 ID;为空时读取 SDK_Setting.json。 |
showChangeBtn |
boolean |
true |
是否显示“换一换”;当前仅 Android 生效。 |
showPageTitle |
boolean |
true |
是否显示 SDK 聚合页标题。 |
topDramaId |
string |
'0' |
置顶短剧 ID,传 '0' 表示不指定。 |
freeEpisodeCount |
number |
1 |
进入详情播放页后的前置免费集数,范围 1-20。 |
unlockEpisodeCount |
number |
1 |
每次激励视频解锁的集数,范围 1-10。 |
unlockAdMode |
'sdk' \| 'custom' |
'sdk' |
SDK 内置广告或业务侧自定义广告。 |
嵌入组件没有独立页面返回按钮,内部固定 showBackBtn: false、topOffset: 0;这两个 API 页面参数不是组件属性。
组件事件
| 事件 | 滑滑流 | 聚合页 | 说明 |
|---|---|---|---|
load |
支持 | 支持 | 原生组件创建并挂载成功。 |
error |
支持 | 支持 | 初始化、配置或原生页面创建失败,参数为 ShortDramaError。 |
drawEvent |
支持 | - | 滑滑流请求、加载和关闭等事件。 |
homeEvent |
- | 支持 | 聚合页请求、加载和创建失败等事件。 |
playEvent |
支持 | 支持 | 内部详情播放事件。 |
adEvent |
支持 | 支持 | SDK 广告事件。 |
unlockEvent |
支持 | 支持 | 自定义解锁事件。 |
标准组件事件处理函数直接接收对应事件数据:
<tt-djx-draw
@load="handleLoad"
@error="handleError"
@drawEvent="handleDrawEvent"
/>
组件方法
两个组件均通过模板引用暴露以下方法:
| 方法 | 返回值 | 说明 |
|---|---|---|
reload() |
void |
使用当前属性重新创建原生内容。 |
notifyUnlockAdWillShow(options) |
boolean |
自定义解锁时通知 SDK 激励视频即将展示。 |
completeUnlock(options) |
boolean |
自定义解锁完成后回传成功或失败。 |
组件属性改变时会自动重新加载原生内容,可能重置当前滚动位置或播放状态;不要在高频响应式数据中反复修改组件属性。
组件自定义广告流程
unlockAdMode="sdk" 不需要处理 unlockEvent。使用 custom 时,应监听 unlockRequired,通过当前组件引用完成广告展示和结果回传:
<tt-djx-draw
ref="drawRef"
unlock-ad-mode="custom"
@unlockEvent="handleUnlockEvent"
/>
流程要求:
- 收到
unlockRequired后保存其taskId。 - 广告真实展示前调用组件的
notifyUnlockAdWillShow({ taskId, cpm })。 - 奖励下发后调用
completeUnlock({ taskId, success: true, cpm })。 - 加载失败、展示失败或用户跳过时调用
completeUnlock({ taskId, success: false })。
布局、tabBar 与样式边界
- 组件宽高完全由外层布局决定,必须给组件或父容器提供明确的宽高或
flex: 1。 - 普通页面和 tabBar 子页面都可以直接放置组件。
- 原生 tabBar 可能覆盖 native-view 底部,页面应根据
uni.getWindowInfo().windowBottom预留空间;取不到时可使用“50px + 底部安全区”兜底。 - 外层可以控制宽高、间距和布局区域;SDK 内部只能通过公开属性调整频道、标题和元素显隐,不能任意修改卡片、字体、颜色或封面比例。
- 业务页面上的 Loading、Toast 和确认框请使用本插件的
showLoading()、showToast()、showModal()原生 API,确保能显示在短剧原生内容上方。
接入前必读
- 仅支持 App 真机环境;请使用自定义基座或云打包后的 App 调试,浏览器和小程序环境不能调用本插件。
- 使用 HBuilderX 5.26 或更高版本。
- 应用须在穿山甲 / 巨量引擎后台开通短剧能力,在 HBuilderX /
manifest.json中勾选 GroMore(UniAd),并在创建 API 实例或挂载组件前调用一次uni.createRewardedVideoAd()初始化广告 SDK;否则可能出现-9001。 SDK_Setting.json、Android 包名或 iOS Bundle ID 必须与当前应用及其短剧授权一致;不要使用示例应用或其他应用的配置文件。- 短剧仅支持广告解锁,不支持 IAP、会员付费解锁或将短剧全量设为免费观看。短剧 SDK 会校验免费集数和解锁集数,不符合规则时会强制展示广告,规避广告解锁可能导致应用被封禁。
- 短剧解锁广告必须包含穿山甲广告,并产生真实广告曝光。
- 建议开通 UniAd,并联系相关人员在激励视频广告位瀑布流中配置穿山甲广告,穿山甲广告填充率须大于 6%。
- 相关规则请参阅:穿山甲支持中心说明。
目录
运行要求
- 插件版本:
1.0.0。 - HBuilderX:
5.26或更高版本。 - 运行环境:uni-app x App,支持 VDOM 与 Vapor。
| 平台 | SDK 版本 | 支持状态 |
|---|---|---|
| iOS | 2.9.0.6 |
支持 |
| Android | 3.0.0.2 |
支持 |
配置文件
将当前应用对应的 SDK_Setting.json 放入插件目录。
Android 配置
将 Android 应用对应的 SDK_Setting.json 放到:
uni_modules/tt-djx-standard/utssdk/app-android/assets/SDK_Setting.json
重点检查:
init.site_id是当前 Android 应用的穿山甲媒体 ID。license_config.PackageName与项目 Android 包名一致。- 后台已为该应用开通短剧功能,并配置短剧相关广告位。
iOS 配置
将 iOS 应用对应的 SDK_Setting.json 放到:
uni_modules/tt-djx-standard/utssdk/app-ios/Resources/SDK_Setting.json
重点检查:
init.site_id是当前 iOS 应用的穿山甲媒体 ID。license_config.BundleId与项目 iOS Bundle ID 一致。- 后台已为该应用开通短剧功能,并配置短剧相关广告位。
adSiteId 与 adpid
adSiteId:穿山甲广告 SDK 媒体 ID,用于广告 SDK / 短剧 SDK 初始化。不传时插件会读取SDK_Setting.json的init.site_id。adpid:UniAd 激励视频广告位 ID,不传给createShortDrama()。SDK 广告和自定义广告模式都需要先通过它创建一次广告实例以初始化 UniAd/GroMore;仅自定义广告模式需要业务侧主动加载、展示并处理广告回调。
创建实例时可显式传入 adSiteId:
const shortDrama = createShortDrama({
adSiteId: '你的穿山甲媒体 ID'
})
快速开始
导入并创建实例
import { createShortDrama } from '@/uni_modules/tt-djx-standard'
import type { ShortDrama } from '@/uni_modules/tt-djx-standard/utssdk/interface.uts'
let shortDrama: ShortDrama | null = null
// 先触发 UniAd/GroMore 初始化,再创建短剧 SDK 实例。
uni.createRewardedVideoAd({ adpid: '你的激励视频广告位 ID' })
export default {
onLoad() {
shortDrama = createShortDrama()
},
onUnload() {
shortDrama?.destroy()
shortDrama = null
}
}
获取推荐并打开播放页
shortDrama?.getRecommendedList(
{ page: 1, pageSize: 20 },
(res) => {
if (res.list.length === 0) return
const item = res.list[0]
shortDrama?.open(
{
dramaId: item.dramaId,
startEpisode: item.currentEpisode > 0 ? item.currentEpisode : 1,
freeEpisodeCount: 1,
unlockEpisodeCount: 1,
unlockAdMode: 'sdk'
},
() => console.log('打开成功'),
(err) => console.error('打开失败', err)
)
},
(err) => console.error('推荐列表获取失败', err)
)
默认 unlockAdMode: 'sdk' 使用 SDK_Setting.json 中的短剧解锁广告配置,不需要把激励视频广告位 ID 传给短剧插件,但仍需提前调用一次 uni.createRewardedVideoAd({ adpid }) 初始化 UniAd/GroMore。
常用能力示例
列表、分类、搜索
shortDrama.getList({ page: 1, pageSize: 20, order: 'default' }, success, fail)
shortDrama.getRecommendedList({ page: 1, pageSize: 20 }, success, fail)
shortDrama.getCategories(success, fail)
shortDrama.getListByCategory({ category: '霸总', page: 1, pageSize: 20 }, success, fail)
shortDrama.search({ keyword: '霸总', fuzzy: true, page: 1, pageSize: 20 }, success, fail)
shortDrama.getInfo({ dramaId: '123456' }, success, fail)
shortDrama.getInfo({ dramaIds: ['123456', '789012'] }, success, fail)
观看记录与收藏列表
shortDrama.getWatchHistory({ page: 1, pageSize: 20 }, success, fail)
shortDrama.getFavorites({ page: 1, pageSize: 20 }, success, fail)
shortDrama.clearWatchHistory(success, fail)
点赞与收藏操作
shortDrama.like({ dramaId: '123456', episode: 1 }, success, fail)
shortDrama.unlike({ dramaId: '123456', episode: 1 }, success, fail)
shortDrama.favorite({ dramaId: '123456', episode: 1 }, success, fail)
shortDrama.unfavorite({ dramaId: '123456', episode: 1 }, success, fail)
说明:
like()/unlike()操作指定短剧集。favorite()/unfavorite()操作短剧收藏;iOS 收藏 / 取消收藏接口不使用episode,传入也会被忽略。
分集解锁状态
shortDrama.getEpisodeUnlockStatus(
{ dramaId: '123456', freeEpisodeCount: 1 },
(res) => {
const locked = res.list.filter((item) => item.locked)
console.log('锁定集数', locked)
},
fail
)
打开详情播放页
shortDrama.open(
{
dramaId: '123456',
startEpisode: 1,
freeEpisodeCount: 1,
unlockEpisodeCount: 1,
unlockAdMode: 'sdk',
hideLikeButton: false,
hideFavorButton: false
},
success,
fail
)
打开滑滑流
shortDrama.openDraw(
{
channelType: 'recommend',
hideChannelName: false,
hideDramaEnter: false,
hideClose: false,
dramaFree: 1,
topDramaId: '0',
freeEpisodeCount: 1,
unlockEpisodeCount: 1,
unlockAdMode: 'sdk'
},
success,
fail
)
打开原生聚合页
shortDrama.openHome(
{
showPageTitle: true,
showBackBtn: true,
topDramaId: '0',
freeEpisodeCount: 1,
unlockEpisodeCount: 1,
unlockAdMode: 'sdk'
},
success,
fail
)
原生 Loading、Toast 和提示框
弹窗会从当前最上层 Activity/ViewController 展示,因此通过 open()、openDraw()、openHome() 打开的原生页面也可以显示。
shortDrama.showLoading({ title: '正在加载…', mask: true })
shortDrama.hideLoading()
shortDrama.showToast({
title: '加载成功',
duration: 2000,
position: 'center'
})
shortDrama.showModal(
{
title: '提示',
content: '是否继续播放?',
showCancel: true,
cancelText: '取消',
confirmText: '继续'
},
(result) => {
console.log(result.confirm ? '继续' : '取消')
}
)
自定义解锁流程
默认 SDK 解锁不需要监听 onUnlockEvent(),也不需要调用 completeUnlock()。只有当 unlockAdMode: 'custom' 时,业务侧才需要监听 unlockRequired、展示激励视频,并把结果回传给短剧 SDK。
const rewardAd = uni.createRewardedVideoAd({
adpid: '你的激励视频广告位 ID'
})
// 广告实例的生命周期回调只注册一次,不要放进 onUnlockEvent。
let pendingTaskId = ''
function showPendingRewardAd() {
if (pendingTaskId.length === 0) return
// 广告真实展示前通知短剧 SDK。
shortDrama.notifyUnlockAdWillShow({ taskId: pendingTaskId })
rewardAd.show()
}
rewardAd.onLoad(() => {
showPendingRewardAd()
})
rewardAd.onClose((res) => {
if (pendingTaskId.length === 0) return
shortDrama.completeUnlock({
taskId: pendingTaskId,
success: res.isEnded === true,
extra: { isEnded: res.isEnded } as UTSJSONObject
})
pendingTaskId = ''
})
rewardAd.onError((err) => {
if (pendingTaskId.length === 0) return
shortDrama.completeUnlock({
taskId: pendingTaskId,
success: false,
extra: { error: err } as UTSJSONObject
})
pendingTaskId = ''
})
shortDrama.onUnlockEvent((event) => {
if (event.type !== 'unlockRequired') return
pendingTaskId = event.taskId
rewardAd.load()
})
广告加载失败、展示失败或用户跳过广告时,也应调用 completeUnlock({ taskId, success: false }),避免解锁任务挂起。
广告曝光回调 onADWillShow 和奖励下发结果应优先回传广告真实 CPM。无法获取 CPM 时可以传空字符串 ''。
解锁记录绑定
有业务账号体系时,在业务登录成功且短剧 SDK 初始化完成后,先由业务服务端使用穿山甲后台的 server key 生成签名参数,再调用绑定接口。签名参数格式为 nonce=...&ouid=...×tamp=...&sign=...;不要把 server key 下发、保存或传入客户端。
// params 由业务服务端返回,ouid 为稳定的业务账号 ID。
shortDrama.bindUnlockRecord({ params }, (result) => {
console.log('解锁记录已绑定', result.bound, result.extra)
}, (err) => {
console.error('绑定失败', err.code, err.message)
})
// 账号切换:先等待旧账号解绑成功,再绑定新账号。
shortDrama.unbindUnlockRecord(() => {
// 调用 bindUnlockRecord({ params: newAccountParams })
})
// 仅在业务账号真实退出登录时调用;关闭播放页或 destroy() 不应自动解绑。
shortDrama.unbindUnlockRecord()
绑定后,短剧 SDK 会将该账号的已解锁剧集权益同步到当前设备;未绑定时按游客状态处理。应在读取分集解锁状态或打开播放页前完成绑定。
API 参考
createShortDrama(options?)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
adSiteId |
string |
否 | 穿山甲广告 SDK 媒体 ID;不传时读取 SDK_Setting.json 的 init.site_id。 |
ShortDrama 方法
| 方法 | 说明 |
|---|---|
getList(options, success?, fail?) |
获取全量短剧列表。 |
getRecommendedList(options, success?, fail?) |
获取推荐短剧列表。 |
getCategories(success?, fail?) |
获取短剧分类列表。 |
getListByCategory(options, success?, fail?) |
按分类获取短剧列表。 |
getInfo(options, success?, fail?) |
按 dramaId 或 dramaIds 查询短剧信息。 |
getWatchHistory(options, success?, fail?) |
获取观看记录列表。 |
getFavorites(options, success?, fail?) |
获取收藏列表。 |
clearWatchHistory(success?, fail?) |
清空观看记录。 |
getEpisodeUnlockStatus(options, success?, fail?) |
获取短剧分集解锁 / 锁定状态。 |
bindUnlockRecord(options, success?, fail?) |
将游客解锁记录绑定到服务端签名参数中的业务账号。 |
unbindUnlockRecord(success?, fail?) |
解绑当前业务账号;仅用于业务退出登录。 |
isUnlockRecordBound() |
查询短剧 SDK 是否已绑定业务账号。 |
like(options, success?, fail?) / unlike(options, success?, fail?) |
点赞 / 取消点赞指定短剧集。 |
favorite(options, success?, fail?) / unfavorite(options, success?, fail?) |
收藏 / 取消收藏短剧。 |
search(options, success?, fail?) |
搜索短剧。 |
open(options, success?, fail?) |
打开原生短剧播放页。 |
openDraw(options, success?, fail?) |
打开 Android / iOS 原生短剧滑滑流页面。 |
openHome(options, success?, fail?) |
打开 Android / iOS 原生短剧聚合页。 |
notifyUnlockAdWillShow(options) |
自定义解锁流程中,通知短剧 SDK 业务侧激励视频广告即将展示。 |
completeUnlock(options) |
自定义解锁流程中,通知短剧 SDK 业务侧解锁流程已完成。 |
showLoading(options?) |
在当前最上层短剧原生页面显示 Loading。 |
hideLoading() |
隐藏当前实例显示的 Loading。 |
showToast(options) |
在当前最上层短剧原生页面显示轻提示。 |
showModal(options, success?) |
在当前最上层短剧原生页面显示确认提示框。 |
destroy() |
销毁实例并解绑事件。 |
onLoad(callback) / offLoad(callback?) |
监听 / 清空加载成功事件。 |
onError(callback) / offError(callback?) |
监听 / 清空错误事件。 |
onPlayEvent(callback) / offPlayEvent(callback?) |
监听 / 清空详情播放页事件。 |
onDrawEvent(callback) / offDrawEvent(callback?) |
监听 / 清空滑滑流事件。 |
onHomeEvent(callback) / offHomeEvent(callback?) |
监听 / 清空聚合页事件。 |
onAdEvent(callback) / offAdEvent(callback?) |
监听 / 清空广告事件。 |
onUnlockEvent(callback) / offUnlockEvent(callback?) |
监听 / 清空解锁事件。 |
success / fail 均可省略。未传 fail 时,插件会把错误转发到 onError();offXxx(callback) 只移除传入的监听,省略 callback 或传 null 时清空该事件的全部监听。
Options
ShortDramaListOptions
适用于 getList()、getRecommendedList()、getWatchHistory()、getFavorites()。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
page |
number |
否 | 1 |
页码,从 1 开始。 |
pageSize |
number |
否 | 20 |
每页数量。 |
order |
'default' \| 'reverse' |
否 | 'default' |
排序方式,部分接口可能由原生 SDK 决定是否生效。 |
ShortDramaCategoryListOptions
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
category |
string |
是 | - | 分类名称,例如 霸总。 |
page |
number |
否 | 1 |
页码,从 1 开始。 |
pageSize |
number |
否 | 20 |
每页数量。 |
order |
'default' \| 'reverse' |
否 | 'default' |
排序方式。 |
ShortDramaInfoOptions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
dramaId |
string |
否 | 单个短剧 ID,和 dramaIds 二选一。 |
dramaIds |
Array<string> |
否 | 多个短剧 ID,和 dramaId 二选一。 |
ShortDramaEpisodeUnlockStatusOptions
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
dramaId |
string |
是 | - | 短剧 ID。 |
freeEpisodeCount |
number |
否 | 0 |
前置免费观看集数。 |
ShortDramaUserActionOptions
适用于 like()、unlike()、favorite()、unfavorite()。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
dramaId |
string |
是 | - | 短剧 ID。 |
episode |
number |
否 | 1 |
集数;iOS 收藏 / 取消收藏接口不使用该参数。 |
ShortDramaSearchOptions
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
keyword |
string |
是 | - | 搜索关键词。 |
fuzzy |
boolean |
否 | true |
是否开启模糊搜索。 |
page |
number |
否 | 1 |
页码,从 1 开始。 |
pageSize |
number |
否 | 20 |
每页数量。 |
ShortDramaOpenOptions
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
dramaId |
string |
是 | - | 短剧 ID。 |
startEpisode |
number |
否 | 1 |
起播集数。 |
unlockEpisodeCount |
number |
否 | 1 |
每次激励视频可解锁的集数,范围 1-10。 |
freeEpisodeCount |
number |
否 | 1 |
前置免费观看集数,范围 1-20。 |
unlockAdMode |
'sdk' \| 'custom' |
否 | 'sdk' |
解锁广告模式。 |
hideBack |
boolean |
否 | false |
是否隐藏详情页返回按钮。 |
hideTopInfo |
boolean |
否 | false |
是否隐藏详情页顶部信息。 |
hideBottomInfo |
boolean |
否 | false |
是否隐藏详情页底部短剧信息。 |
hideMore |
boolean |
否 | false |
是否隐藏详情页更多按钮。 |
hideLikeButton |
boolean |
否 | false |
是否隐藏详情页点赞按钮。 |
hideFavorButton |
boolean |
否 | false |
是否隐藏详情页收藏按钮。 |
hideRewardDialog |
boolean |
否 | false |
是否隐藏详情页激励广告确认弹窗。 |
topOffset |
number |
否 | - | 详情页顶部偏移,单位 px;当前仅 Android 生效。 |
bottomOffset |
number |
否 | - | 详情页底部偏移,单位 px;当前仅 Android 生效。 |
ShortDramaDrawOptions
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
channelType |
'recommend' \| 'theater' \| 'recommendTheater' |
否 | 'recommend' |
滑滑流频道类型。 |
hideChannelName |
boolean |
否 | false |
是否隐藏频道名称 / 顶部频道 tab。 |
hideDramaInfo |
boolean |
否 | false |
是否隐藏底部短剧信息;当前仅 Android 生效。 |
hideDramaEnter |
boolean |
否 | false |
是否隐藏底部短剧入口。 |
enableRefresh |
boolean |
否 | true |
是否支持下拉刷新;当前仅 Android 生效。 |
hideClose |
boolean |
否 | false |
是否隐藏关闭按钮。 |
dramaFree |
number |
否 | 1 |
短剧滑滑流免费集数。 |
topDramaId |
string |
否 | '0' |
置顶短剧 ID,不传或传 '0' 表示不指定。 |
freeEpisodeCount |
number |
否 | 1 |
进入详情播放页后的前置免费观看集数,范围 1-20。 |
unlockEpisodeCount |
number |
否 | 1 |
进入详情播放页后,每次激励视频可解锁的集数,范围 1-10。 |
unlockAdMode |
'sdk' \| 'custom' |
否 | 'sdk' |
解锁广告模式。 |
ShortDramaHomeOptions
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
showChangeBtn |
boolean |
否 | true |
是否显示换一换按钮;当前仅 Android 生效。 |
showPageTitle |
boolean |
否 | true |
是否显示页面标题。 |
showBackBtn |
boolean |
否 | true |
是否显示返回按钮。 |
topOffset |
number |
否 | 0 |
顶部偏移,单位 px;当前仅 Android 生效。 |
topDramaId |
string |
否 | '0' |
置顶短剧 ID,不传或传 '0' 表示不指定。 |
freeEpisodeCount |
number |
否 | 1 |
进入详情播放页后的前置免费观看集数,范围 1-20。 |
unlockEpisodeCount |
number |
否 | 1 |
进入详情播放页后,每次激励视频可解锁的集数,范围 1-10。 |
unlockAdMode |
'sdk' \| 'custom' |
否 | 'sdk' |
解锁广告模式。 |
NotifyUnlockAdWillShowOptions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
taskId |
string |
是 | unlockRequired 事件返回的任务 ID。 |
cpm |
string |
否 | 广告 CPM;建议传真实值,无法获取时可传空字符串 ''。 |
CompleteUnlockOptions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
taskId |
string |
是 | unlockRequired 事件返回的任务 ID。 |
success |
boolean |
是 | 激励视频是否完整播放并允许本次解锁。 |
cpm |
string |
否 | 广告 CPM;建议传真实值,无法获取时可传空字符串 ''。 |
extra |
UTSJSONObject |
否 | 透传给短剧 SDK 的附加信息。 |
Result 与数据类型
ShortDramaListResult
| 字段 | 类型 | 说明 |
|---|---|---|
list |
Array<ShortDramaInfo> |
短剧列表。 |
extra |
UTSJSONObject |
原生 SDK 返回的附加数据,例如 hasMore。 |
ShortDramaInfo
| 字段 | 类型 | 说明 |
|---|---|---|
dramaId |
string |
短剧 ID。 |
title |
string |
标题。 |
coverUrl |
string |
封面图地址。 |
summary |
string |
简介。 |
categoryId |
number |
分类 ID。 |
categoryName |
string |
分类名称。 |
currentEpisode |
number |
当前推荐或续播集数。 |
totalEpisodes |
number |
总集数。 |
groupId |
string |
分组 ID。 |
unlockedEpisodeIndex |
number |
原生 SDK 返回的已解锁位置。 |
styleType |
number |
样式类型。 |
durationSeconds |
number |
时长,单位秒。 |
rawData |
UTSJSONObject |
原生 SDK 原始数据。 |
ShortDramaCategoryListResult / ShortDramaCategoryInfo
| 字段 | 类型 | 说明 |
|---|---|---|
list |
Array<ShortDramaCategoryInfo> |
分类列表。 |
extra |
UTSJSONObject |
原生 SDK 返回的附加数据。 |
ShortDramaCategoryInfo.name |
string |
分类名称。 |
ShortDramaCategoryInfo.rawData |
UTSJSONObject |
原始分类数据。 |
ShortDramaEpisodeUnlockStatusResult / ShortDramaEpisodeUnlockStatusInfo
| 字段 | 类型 | 说明 |
|---|---|---|
list |
Array<ShortDramaEpisodeUnlockStatusInfo> |
分集锁定状态列表。 |
extra |
UTSJSONObject |
原生 SDK 返回的附加数据。 |
ShortDramaEpisodeUnlockStatusInfo.episodeIndex |
number |
集数索引,按官方 SDK 返回值透传。 |
ShortDramaEpisodeUnlockStatusInfo.locked |
boolean |
是否锁定。 |
ShortDramaEpisodeUnlockStatusInfo.rawData |
UTSJSONObject |
原始数据。 |
ShortDramaError
| 字段 | 类型 | 说明 |
|---|---|---|
code |
number |
错误码。 |
message |
string |
错误描述。 |
detail |
UTSJSONObject |
原生 SDK 附加错误信息。 |
事件说明
播放、滑滑流、聚合页与广告事件
| 事件 | 常见 type |
说明 |
|---|---|---|
ShortDramaPlayEvent |
requestStart、requestSuccess、requestFail、play、pause、resume、completion、over、seek、progress、close、dramaSwitch |
详情播放页事件。 |
ShortDramaDrawEvent |
requestStart、requestSuccess、requestFail、load、play、pause、resume、completion、over、seek、progress、close |
滑滑流事件。 |
ShortDramaHomeEvent |
requestStart、requestSuccess、prepareFail、createFail、load、open、close |
聚合页生命周期事件。 |
ShortDramaAdEvent |
request、requestFail、show、clicked、rewardVerify、playStart、playComplete、skippedVideo |
广告相关事件。 |
事件对象通用字段:
| 字段 | 类型 | 说明 |
|---|---|---|
type |
string |
事件类型。 |
data |
UTSJSONObject |
事件附加数据。 |
code |
number |
错误码;成功为 0。 |
message |
string |
错误信息。 |
解锁事件
| 字段 | 类型 | 说明 |
|---|---|---|
type |
'unlockStart' \| 'unlockRequired' \| 'unlockEnd' |
解锁阶段。 |
taskId |
string |
解锁任务 ID。 |
drama |
ShortDramaInfo |
当前短剧信息。 |
code |
number |
错误码;成功为 0。 |
message |
string |
错误信息。 |
extra |
UTSJSONObject |
附加数据。 |
unlockRequired 只在 unlockAdMode: 'custom' 的业务侧自定义解锁流程中需要处理。
payload 约定
Android / iOS 会尽量统一补齐以下字段;原生 SDK 没有返回时字段可能为空:
| 字段 | 说明 |
|---|---|
data.source / extra.source |
事件来源:detail、draw、home、sdk、customUnlock、unlock。 |
data.dramaId |
当前短剧 ID。 |
data.episode / data.position |
当前集数、seek 位置等上下文。 |
data.current / data.progress |
播放进度;current 统一为毫秒,progress 为 0~1。 |
data.taskId / data.cpm / data.extra |
自定义解锁广告任务、价格和业务透传数据。 |
data.rawData / extra.rawData |
Android / iOS 原生 SDK 返回中无法标准化的原始数据。 |
业务逻辑建议优先使用标准字段,不要直接依赖 rawData 的平台私有结构。rawData 和 extra 是高级透传字段,结构可能随平台或原生 SDK 版本变化,不属于稳定的跨平台协议。
平台差异
openDraw():Android 支持hideDramaInfo和enableRefresh;当前 iOS SDK 的DJXDrawVideoVCConfig未暴露对应字段,因此这两个参数在 iOS 被忽略。openHome():Android / iOS 均为原生聚合页;iOS 使用DJXPlayletAggregatePageViewController,支持导航栏标题、返回按钮、置顶短剧和详情播放配置;showChangeBtn、topOffset当前仅 Android 生效。favorite()/unfavorite():iOS 收藏 / 取消收藏接口不使用episode。offXxx(callback?):传 callback 时精确移除该监听;省略 callback 或传null时清空该事件的全部监听。
错误码
| 错误码 | 说明 | 建议处理 |
|---|---|---|
-1 |
参数错误或原生 SDK 通用错误。 | 检查入参、短剧 ID、搜索关键词等是否正确。 |
-9001 |
UniAd 广告 SDK 初始化失败。常见于未勾选 GroMore,或未先调用广告 API 就初始化短剧 SDK。 | 在 HBuilderX / manifest.json 勾选穿山甲 GroMore(UniAd)模块,并先调用 uni.createRewardedVideoAd() 等广告 API,再调用 createShortDrama();同时检查广告模块配置和原生日志。 |
-7001 |
短剧 SDK / 广告 SDK 初始化或 prepare 失败。 | 检查 site_id、SDK 配置、依赖冲突和原生日志。 |
-7002 |
当前原生上下文不存在,例如 Android Activity 或 iOS UIViewController 为空。 |
确认在 App 真机 / 自定义基座页面生命周期内调用。 |
-7003 |
原生页面、控制器或 Widget 创建 / 打开失败。 | 查看原生日志,检查 SDK 版本、页面参数和宿主依赖。 |
-2001 |
解锁任务不存在。 | 检查 taskId 是否来自当前 unlockRequired 事件,是否重复回传。 |
推荐统一监听错误事件:
shortDrama.onError((err) => {
console.error('短剧插件错误', err.code, err.message, err.detail)
})
常见问题
默认 SDK 解锁需要传激励视频广告位 ID 吗?
默认 SDK 解锁广告位来自当前应用的 SDK_Setting.json,不需要把 adpid 传给短剧插件;但在创建短剧实例或挂载组件前,仍需调用一次 uni.createRewardedVideoAd({ adpid }) 初始化 UniAd/GroMore,且不需要主动展示。只有 unlockAdMode: 'custom' 时,业务侧才需要自行加载和展示激励视频,并通过 completeUnlock() 回传结果。
SDK 解锁和自定义解锁如何选择?
unlockAdMode: 'sdk' 由插件使用 SDK_Setting.json 中的短剧解锁广告配置,接入简单,但业务侧不能调整广告请求逻辑。unlockAdMode: 'custom' 由业务侧通过 uni.createRewardedVideoAd({ adpid }) 请求广告,适用于已接入 UniAd 的项目;对应瀑布流必须包含穿山甲广告,并在广告曝光、奖励下发、用户跳过或广告失败时,通过 notifyUnlockAdWillShow() 和 completeUnlock() 回传解锁状态。
自定义解锁失败时如何排查?
先检查业务侧激励视频广告的加载或展示失败回调;广告未展示、用户跳过或广告失败时,必须使用当前 taskId 调用 completeUnlock({ taskId, success: false }) 结束任务。广告完整观看并发放奖励后,再调用 completeUnlock({ taskId, success: true })。同时确认 UniAd 瀑布流包含穿山甲广告且填充正常。
应用重装后为什么仍保留解锁记录?
接入登录并绑定用户数据时,解锁记录会随用户账号保留;未绑定账号时,短剧 SDK 的解锁记录可能与设备关联。业务侧的登录退出或账号切换逻辑需要自行处理。
自定义广告不回传 CPM 会怎样?
CPM 可以传空字符串 ''。但若 CPM 为空且平台未监测到合理广告展示,短剧 SDK 会强制切换为 SDK 直出广告,并屏蔽自定义解锁逻辑。应在广告真实曝光时调用 notifyUnlockAdWillShow({ taskId, cpm }),并在奖励下发时通过 completeUnlock({ taskId, success: true, cpm }) 回传同一广告的 CPM。
可以设置全部免费观看吗?
不可以。短剧仅支持广告解锁,不支持 IAP、会员付费或全量免费观看;免费集数由短剧 SDK 强校验。本插件的 freeEpisodeCount 公开参数范围为 1-20,不能通过该参数设置全量免费观看。
页面销毁时需要做什么?
如果当前页面或模块不再使用短剧实例,建议调用 destroy() 解绑事件监听,避免重复回调。
出现初始化失败时优先检查什么?
优先检查穿山甲短剧能力是否开通、GroMore(UniAd)模块是否勾选、是否先调用了 uni.createRewardedVideoAd() 等广告 API、SDK_Setting.json 是否属于当前应用、包名 / Bundle ID 是否与 license 配置一致,以及原生日志中的 UniAd -9001 初始化错误。

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 1009
赞赏 4
下载 12649597
赞赏 1953
赞赏
京公网安备:11010802035340号