iOS JVaas SDK API文档
最近更新:2021-12-15
展开全部
iOS JVaas SDK API文档
一、 SDK接口类说明
- JVSService:包含SDK功能服务的大部分接口。
- JVSVideoDelegate: 视频流页面的代理回调,包含三个方面的回调。一个是视频播放相关事件,包含开始播放、暂停、播放结束、播放失败、;另个一个方面是用户对视频操作相关行为回调,包含点赞、取消点赞、分享;还有一个方面是广告相关的回调,包含,广告展现、广告点击、广告获取成功、广告获取失败。
- JVSRootViewController:横视频UI页入口,带频道和水平导航的UI,UIViewController类型,可以方便的嵌入用户App中,频道里面是feed流视频列表。
- JVSFeeJVSFeedListViewController:某单一频道fee流页面。
- JVSLittleVideoViewController: 类似抖音的竖屏视频页面。
- JVSLittleVideoListController:小视频瀑布流布局,类似快手的竖屏视频列表页面。
- JVSLittleVideoWaterFallViewController:小视频瀑布流布局,类似快手的竖屏视频列表页面,不规则。
- JVSFeedVideoData:单个视频具体信息类
- JVSVideoProvider:视频内容提供者类
- JVSUIConfig:UI界面配置类,设置视频UI界面
- JVSDoubleLittleVideoViewController: 类似抖音的竖屏视频页面+关注页面。
1.1 在使用SDK的类中添加引用:
只需在类中添加如下引用即可使用SDK所有功能,无需引用JVSService等对应的类。
OC项目: #import <JVaasContent/JVaasContent-Swift.h>
Swift项目: import JVaasContent
1.2 初始化SDK及SDK配置等
在程序刚启动时, 调JVaasContent SDK其他功能之前,调初始化代码。
/// 初始化SDK
/// - Parameters:
/// - appkey: 极光平台申请的appkey
/// - channelId: 渠道id
JVSService.setAppkey(appkey: "您在极光官网申请的Appkey", channelId: "apple")
/**
保存用户标签
@param uid:用户id
@param userInfo:用户信息
示例:
{
"gender": "1", 0-未知,1-男性,2-女性
"age": "18,28" 年龄所在的区间段,以逗号分隔,年龄段的开始和结束值可以相同
}
*/
JVSService.setUserTag(uid:"",userInfo:["gender": "1", "age":"18"])
/// 检查业务是否可用,回调结果有缓存,24小时更新一次,setAppkey接口调用之后使用才生效。
/// - Parameter callBack: 回调信息,result 是否可用,eror错误信息
JVSService.checkBussinessEnable { (result, eror) in
}
/// 初始化SDK
/// - Parameters:
/// - appkey: 极光平台申请的appkey
/// - channelId: 渠道id
JVSService.setAppkey(appkey: "您在极光官网申请的Appkey", channelId: "apple")
/**
保存用户标签
@param uid:用户id
@param userInfo:用户信息
示例:
{
"gender": "1", 0-未知,1-男性,2-女性
"age": "18,28" 年龄所在的区间段,以逗号分隔,年龄段的开始和结束值可以相同
}
*/
JVSService.setUserTag(uid:"",userInfo:["gender": "1", "age":"18"])
/// 检查业务是否可用,回调结果有缓存,24小时更新一次,setAppkey接口调用之后使用才生效。
/// - Parameter callBack: 回调信息,result 是否可用,eror错误信息
JVSService.checkBussinessEnable { (result, eror) in
}
此代码块在浮窗中显示
1.3 接入用户系统
/// 用户登录接口
/// - Parameters:
/// - nickname: 昵称
/// - avatar: 头像 url地址
/// - phone: 手机号
/// - userid: 用户 id
/// - callback: 结果回调,成功失败,msg详细信息
JVSService.login(nickname: "Alan", avatar: "头像 url地址", phone: ""手机号,未传手机号不可评论", userid: "用户ID") { (result, msg) in
}
// 用户退出登录
JVSService.logout()
// 查询用户登录状态
BOOL isLogin = JVSService.isLogin
// 切换用户时单独调用
JVSService.setUid("xxx")
/// 用户登录接口
/// - Parameters:
/// - nickname: 昵称
/// - avatar: 头像 url地址
/// - phone: 手机号
/// - userid: 用户 id
/// - callback: 结果回调,成功失败,msg详细信息
JVSService.login(nickname: "Alan", avatar: "头像 url地址", phone: ""手机号,未传手机号不可评论", userid: "用户ID") { (result, msg) in
}
// 用户退出登录
JVSService.logout()
// 查询用户登录状态
BOOL isLogin = JVSService.isLogin
// 切换用户时单独调用
JVSService.setUid("xxx")
此代码块在浮窗中显示
1.4嵌入UI
接入JVSRootViewController、JVSLittleVideoViewController、JVSDoubleLittleVideoViewController等类时,建议使用childViewController的方式接入,以便调整frame来快速适配不同的项目结构。
// 为兼容iOS9设备中,scrollView特定情况下自动向下偏移一段距离的问题,建议使用时在viewController中加入以下代码
self.automaticallyAdjustsScrollViewInsets = NO;
// 为兼容iOS9设备中,scrollView特定情况下自动向下偏移一段距离的问题,建议使用时在viewController中加入以下代码
self.automaticallyAdjustsScrollViewInsets = NO;
此代码块在浮窗中显示
1.4.1 自定义UI设置
JVSUIConfig是UI界面配置类,设置视频UI界面可以通过下面的示例配置
// CP信息页是否显示关注按钮(默认隐藏)
JVSUIConfig.showFollow = true;
/*----------------- 横版视频配置项 -----------------*/
// 播放页类型(默认:相关视频;局部信息流不支持当前页播放形式)
JVSUIConfig.playPageType = .relation
// 是否响应点击头像跳转CP页(默认响应)
JVSUIConfig.cpInfoResponse = true
// 评论展示类型(默认不显示)
JVSUIConfig.commentType = .none
// 是否显示分享按钮(默认不显示)
JVSUIConfig.showShare = true
/*----------------- 竖版视频配置项 -----------------*/
// 评论展示类型(默认不显示)
JVSUIConfig.littleCommentType = .none
// 播放器填充类型(默认resizeAspect)
JVSUIConfig.playerContentMode = .resizeAspectFill
// 点赞等按钮位于底部(默认右边)
JVSUIConfig.bottomPanel = false;
// 是否显示分享按钮(默认不显示)
JVSUIConfig.littleShowShare = true
// 是否响应点击头像跳转CP页(默认响应)
JVSUIConfig.littleCpInfoResponse = true
// CP信息页是否显示关注按钮(默认隐藏)
JVSUIConfig.showFollow = true;
/*----------------- 横版视频配置项 -----------------*/
// 播放页类型(默认:相关视频;局部信息流不支持当前页播放形式)
JVSUIConfig.playPageType = .relation
// 是否响应点击头像跳转CP页(默认响应)
JVSUIConfig.cpInfoResponse = true
// 评论展示类型(默认不显示)
JVSUIConfig.commentType = .none
// 是否显示分享按钮(默认不显示)
JVSUIConfig.showShare = true
/*----------------- 竖版视频配置项 -----------------*/
// 评论展示类型(默认不显示)
JVSUIConfig.littleCommentType = .none
// 播放器填充类型(默认resizeAspect)
JVSUIConfig.playerContentMode = .resizeAspectFill
// 点赞等按钮位于底部(默认右边)
JVSUIConfig.bottomPanel = false;
// 是否显示分享按钮(默认不显示)
JVSUIConfig.littleShowShare = true
// 是否响应点击头像跳转CP页(默认响应)
JVSUIConfig.littleCpInfoResponse = true
此代码块在浮窗中显示
1.4.2 嵌入多个频道导航的类:JVSRootViewController
1.4.2.1 添加 rootViewController
var channelVC: JVSRootViewController!
//// delegate 是横版视频状态等回调信息(详见3.6),self 是UIViewController的一个实例
self.channelVC = JVSService.getChannelListViewController(delegate: self)
self.channelVC.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
self.view.addSubview((self.channelVC.view)!) self.addChild(self.channelVC);
var channelVC: JVSRootViewController!
//// delegate 是横版视频状态等回调信息(详见3.6),self 是UIViewController的一个实例
self.channelVC = JVSService.getChannelListViewController(delegate: self)
self.channelVC.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
self.view.addSubview((self.channelVC.view)!) self.addChild(self.channelVC);
此代码块在浮窗中显示
1.4.2.2 feed流滑动控制
控制feed流滑动到顶部,并设置是否刷新feed数据。
self.channelVC.scrollToTop(pullRefresh: false)
self.channelVC.scrollToTop(pullRefresh: false)
此代码块在浮窗中显示
1.4.3 单一频道类:JVSFeeJVSFeedListViewController
1.4.3.1 添加单个频道
var channel: JVSFeeJVSFeedListViewController!
//// delegate 是横版视频状态等回调信息(详见3.6),self 是UIViewController的一个实例
self.channel = JVSService.getOneChannelViewController(delegate: self)
self.channel.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
self.view.addSubview((self.channel.view)!)
self.addChild(self.channel);
channel.channelID = "23e234"
var channel: JVSFeeJVSFeedListViewController!
//// delegate 是横版视频状态等回调信息(详见3.6),self 是UIViewController的一个实例
self.channel = JVSService.getOneChannelViewController(delegate: self)
self.channel.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
self.view.addSubview((self.channel.view)!)
self.addChild(self.channel);
channel.channelID = "23e234"
此代码块在浮窗中显示
1.4.3.2 feed流滑动控制:同4.2.1
self.channel.scrollToTop(pullRefresh: false)
self.channel.scrollToTop(pullRefresh: false)
此代码块在浮窗中显示
1.4.4 横版视频状态等回调信息:JVSVideoDelegate
//视频开始播放(isAD: 是否是广告)
func playerStart(videoInfo: JVSFeedVideoData, isAD: Bool) {
print(">>>>>>>>> playerStart videoID:\(videoInfo.video_id ?? "")")
}
// 视频播放暂停状态变化
func playerPause(videoInfo: JVSFeedVideoData, isPause: Bool, isAD: Bool) {
print(">>>>>>>>> playerPause videoID:\(videoInfo.video_id ?? "") isPause:\(isPause)")
logData.append("\(isPause ? "视频暂停" : "视频播放")")
logTableView.reloadData()
}
// 视频播放结束
func playerEnd(videoInfo: JVSFeedVideoData, isAD: Bool) {
print(">>>>>>>>> playerEnd videoID:\(videoInfo.video_id ?? "")")
}
// 视频播放失败
func playerError(videoInfo: JVSFeedVideoData, error: Error?, isAD: Bool) {
print(">>>>>>>>> playerError videoID:\(videoInfo.video_id ?? "")")
}
//点击分享按钮(isMain: 竖版视频用来标记是否是首页,仅首页支持负反馈功能)
func clickShareBtn(videoInfo: JVSFeedVideoData, isMain: Bool) {
if isMain {
self.channelVC.disLikeVideo(feed: videoInfo)
}
print(">>>>>>>>> clickShareBtn videoID:\(videoInfo.video_id ?? "") isMain: \(isMain)")
}
// 点赞(isPraise:true - 点赞,false - 取消点赞)
func clickPraiseBtn(videoInfo: JVSFeedVideoData, isPraise: Bool, isAD: Bool) {
print(">>>>>>>>> clickPraiseBtn videoID:\(videoInfo.video_id ?? "") isPraise: \(isPraise)")
logData.append("\(isPraise ? "点赞" : "取消点赞")")
logTableView.reloadData()
}
// 进入CP页
func gotoCPPage(videoInfo: JVSFeedVideoData) {
print(">>>>>>>>> gotoCPPage cpID:\(videoInfo.provider?.id ?? "")")
logData.append("进入CP页")
logTableView.reloadData()
UIApplication.shared.windows.last?.addSubview(logTableView)
}
// 进入播放页
func gotoPlayerPage(videoInfo: JVSFeedVideoData) {
print(">>>>>>>>> gotoPlayerPage videoID:\(videoInfo.video_id ?? "")")
logData.append("进入播放页")
logTableView.reloadData()
UIApplication.shared.windows.last?.addSubview(logTableView)
}
// 进入Feed页
func gotoFeedPage(channelID: String) {
logData.append("进入feed页:\(channelID)")
logTableView.reloadData()
}
//广告展现
func adShowWith(ylID: String, reqId: String, type: Int) {
print(">>>>>>>>> adShow ylid: \(ylID) reqid: \(reqId) type: \(type)")
}
// 广告被点击
func adClickWith(ylID: String, reqId: String, type: Int) {
print(">>>>>>>>> adClick ylid: \(ylID) reqid: \(reqId) type: \(type)")
}
//视频开始播放(isAD: 是否是广告)
func playerStart(videoInfo: JVSFeedVideoData, isAD: Bool) {
print(">>>>>>>>> playerStart videoID:\(videoInfo.video_id ?? "")")
}
// 视频播放暂停状态变化
func playerPause(videoInfo: JVSFeedVideoData, isPause: Bool, isAD: Bool) {
print(">>>>>>>>> playerPause videoID:\(videoInfo.video_id ?? "") isPause:\(isPause)")
logData.append("\(isPause ? "视频暂停" : "视频播放")")
logTableView.reloadData()
}
// 视频播放结束
func playerEnd(videoInfo: JVSFeedVideoData, isAD: Bool) {
print(">>>>>>>>> playerEnd videoID:\(videoInfo.video_id ?? "")")
}
// 视频播放失败
func playerError(videoInfo: JVSFeedVideoData, error: Error?, isAD: Bool) {
print(">>>>>>>>> playerError videoID:\(videoInfo.video_id ?? "")")
}
//点击分享按钮(isMain: 竖版视频用来标记是否是首页,仅首页支持负反馈功能)
func clickShareBtn(videoInfo: JVSFeedVideoData, isMain: Bool) {
if isMain {
self.channelVC.disLikeVideo(feed: videoInfo)
}
print(">>>>>>>>> clickShareBtn videoID:\(videoInfo.video_id ?? "") isMain: \(isMain)")
}
// 点赞(isPraise:true - 点赞,false - 取消点赞)
func clickPraiseBtn(videoInfo: JVSFeedVideoData, isPraise: Bool, isAD: Bool) {
print(">>>>>>>>> clickPraiseBtn videoID:\(videoInfo.video_id ?? "") isPraise: \(isPraise)")
logData.append("\(isPraise ? "点赞" : "取消点赞")")
logTableView.reloadData()
}
// 进入CP页
func gotoCPPage(videoInfo: JVSFeedVideoData) {
print(">>>>>>>>> gotoCPPage cpID:\(videoInfo.provider?.id ?? "")")
logData.append("进入CP页")
logTableView.reloadData()
UIApplication.shared.windows.last?.addSubview(logTableView)
}
// 进入播放页
func gotoPlayerPage(videoInfo: JVSFeedVideoData) {
print(">>>>>>>>> gotoPlayerPage videoID:\(videoInfo.video_id ?? "")")
logData.append("进入播放页")
logTableView.reloadData()
UIApplication.shared.windows.last?.addSubview(logTableView)
}
// 进入Feed页
func gotoFeedPage(channelID: String) {
logData.append("进入feed页:\(channelID)")
logTableView.reloadData()
}
//广告展现
func adShowWith(ylID: String, reqId: String, type: Int) {
print(">>>>>>>>> adShow ylid: \(ylID) reqid: \(reqId) type: \(type)")
}
// 广告被点击
func adClickWith(ylID: String, reqId: String, type: Int) {
print(">>>>>>>>> adClick ylid: \(ylID) reqid: \(reqId) type: \(type)")
}
此代码块在浮窗中显示
1.4.5 类似抖音的竖屏视频页面:JVSLittleVideoViewController
var doubleLittleVideoViewController: JVSLittleVideoViewController!
// delegate小视频视频状态及广告加载等回调信息(详见4.7),self是UIviewController的一个实例
littleVc = JVSService.getLittleVideoViewController(delegate: self)
littleVc!.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - statusBarHeight - gSafeAreaInsets.bottom - 49)
self.view.addSubview(littleVc.view)
self.addChild(littleVc)
var doubleLittleVideoViewController: JVSLittleVideoViewController!
// delegate小视频视频状态及广告加载等回调信息(详见4.7),self是UIviewController的一个实例
littleVc = JVSService.getLittleVideoViewController(delegate: self)
littleVc!.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - statusBarHeight - gSafeAreaInsets.bottom - 49)
self.view.addSubview(littleVc.view)
self.addChild(littleVc)
此代码块在浮窗中显示
1.4.6 类似快手的竖屏视频列表页面+关注页面:JVSDoubleLittleVideoViewController
var doubleLittleVideoViewController:JVSDoubleLittleVideoViewController!
self.doubleLittleVideoViewController = JVSService.getDoubleLittleVideoViewController(delegate: self)
doubleLittleVideoViewController!.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - gSafeAreaInsets.bottom - 49)
self.view.addSubview(doubleLittleVideoViewController.view)
self.addChild(doubleLittleVideoViewController)
var doubleLittleVideoViewController:JVSDoubleLittleVideoViewController!
self.doubleLittleVideoViewController = JVSService.getDoubleLittleVideoViewController(delegate: self)
doubleLittleVideoViewController!.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - gSafeAreaInsets.bottom - 49)
self.view.addSubview(doubleLittleVideoViewController.view)
self.addChild(doubleLittleVideoViewController)
此代码块在浮窗中显示
1.4.7 类似快手的竖屏视频列表页面:JVSLittleVideoListController
var littleListVc: JVSLittleVideoListController!
// delegate 小视频视频状态及广告加载等回调信息(详见4.7)
littleListVc = JVSService.getLittleListVideoViewController(delegate: self)
littleListVc!.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - statusBarHeight - gSafeAreaInsets.bottom - 49)
self.view.addSubview(littleListVc.view)
self.addChild(littleListVc)
var littleListVc: JVSLittleVideoListController!
// delegate 小视频视频状态及广告加载等回调信息(详见4.7)
littleListVc = JVSService.getLittleListVideoViewController(delegate: self)
littleListVc!.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - statusBarHeight - gSafeAreaInsets.bottom - 49)
self.view.addSubview(littleListVc.view)
self.addChild(littleListVc)
此代码块在浮窗中显示
1.4.8 小视频视频状态及广告加载等回调信息:JVSVideoDelegate
// 首个视频开始播放(isAD: 是否是广告)
func firstPlayerStart(videoInfo: JVSFeedVideoData, isAD: Bool) {
print(">>>>>>>>> firstPlayerStart videoID:\(videoInfo.video_id ?? "")")
}
//视频开始播放(isAD: 是否是广告)
func playerStart(videoInfo: JVSFeedVideoData, isAD: Bool) {
print(">>>>>>>>> playerStart videoID:\(videoInfo.video_id ?? "")")
}
// 视频播放暂停状态变化
func playerPause(videoInfo: JVSFeedVideoData, isPause: Bool, isAD: Bool) {
print(">>>>>>>>> playerPause videoID:\(videoInfo.video_id ?? "") isPause:\(isPause)")
logData.append("\(isPause ? "视频暂停" : "视频播放")")
logTableView.reloadData()
}
// 视频播放结束
func playerEnd(videoInfo: JVSFeedVideoData, isAD: Bool) {
print(">>>>>>>>> playerEnd videoID:\(videoInfo.video_id ?? "")")
}
// 视频播放失败
func playerError(videoInfo: JVSFeedVideoData, error: Error?, isAD: Bool) {
print(">>>>>>>>> playerError videoID:\(videoInfo.video_id ?? "")")
}
// 广告信息获取成功
func ylADInfoLoadSuccess(adID: String) {
print(">>>>>>>>> ylADInfoLoadSuccess videoID:\(adID)")
}
//广告信息获取失败
func ylADInfoLoadFail(adID: String, error: Error?) {
print(">>>>>>>>> ylADInfoLoadFail videoID:\(adID)")
}
//点击分享按钮(isMain: 竖版视频用来标记是否是首页,仅首页支持负反馈功能)
func clickShareBtn(videoInfo: JVSFeedVideoData, isMain: Bool) {
if isMain {
self.channelVC.disLikeVideo(feed: videoInfo)
}
print(">>>>>>>>> clickShareBtn videoID:\(videoInfo.video_id ?? "") isMain: \(isMain)")
}
// 点赞(isPraise:true - 点赞,false - 取消点赞)
func clickPraiseBtn(videoInfo: JVSFeedVideoData, isPraise: Bool, isAD: Bool) {
print(">>>>>>>>> clickPraiseBtn videoID:\(videoInfo.video_id ?? "") isPraise: \(isPraise)")
logData.append("\(isPraise ? "点赞" : "取消点赞")")
logTableView.reloadData()
}
// 进入CP页
func gotoCPPage(videoInfo: JVSFeedVideoData) {
print(">>>>>>>>> gotoCPPage cpID:\(videoInfo.provider?.id ?? "")")
logData.append("进入CP页")
logTableView.reloadData()
UIApplication.shared.windows.last?.addSubview(logTableView)
}
// 进入播放页
func gotoPlayerPage(videoInfo: JVSFeedVideoData) {
print(">>>>>>>>> gotoPlayerPage videoID:\(videoInfo.video_id ?? "")")
logData.append("进入播放页")
logTableView.reloadData()
UIApplication.shared.windows.last?.addSubview(logTableView)
}
// 进入Feed页
func gotoFeedPage(channelID: String) {
logData.append("进入feed页:\(channelID)")
logTableView.reloadData()
}
//广告展现
func adShowWith(ylID: String, reqId: String, type: Int) {
print(">>>>>>>>> adShow ylid: \(ylID) reqid: \(reqId) type: \(type)")
}
// 广告被点击
func adClickWith(ylID: String, reqId: String, type: Int) {
print(">>>>>>>>> adClick ylid: \(ylID) reqid: \(reqId) type: \(type)")
}
// 首个视频开始播放(isAD: 是否是广告)
func firstPlayerStart(videoInfo: JVSFeedVideoData, isAD: Bool) {
print(">>>>>>>>> firstPlayerStart videoID:\(videoInfo.video_id ?? "")")
}
//视频开始播放(isAD: 是否是广告)
func playerStart(videoInfo: JVSFeedVideoData, isAD: Bool) {
print(">>>>>>>>> playerStart videoID:\(videoInfo.video_id ?? "")")
}
// 视频播放暂停状态变化
func playerPause(videoInfo: JVSFeedVideoData, isPause: Bool, isAD: Bool) {
print(">>>>>>>>> playerPause videoID:\(videoInfo.video_id ?? "") isPause:\(isPause)")
logData.append("\(isPause ? "视频暂停" : "视频播放")")
logTableView.reloadData()
}
// 视频播放结束
func playerEnd(videoInfo: JVSFeedVideoData, isAD: Bool) {
print(">>>>>>>>> playerEnd videoID:\(videoInfo.video_id ?? "")")
}
// 视频播放失败
func playerError(videoInfo: JVSFeedVideoData, error: Error?, isAD: Bool) {
print(">>>>>>>>> playerError videoID:\(videoInfo.video_id ?? "")")
}
// 广告信息获取成功
func ylADInfoLoadSuccess(adID: String) {
print(">>>>>>>>> ylADInfoLoadSuccess videoID:\(adID)")
}
//广告信息获取失败
func ylADInfoLoadFail(adID: String, error: Error?) {
print(">>>>>>>>> ylADInfoLoadFail videoID:\(adID)")
}
//点击分享按钮(isMain: 竖版视频用来标记是否是首页,仅首页支持负反馈功能)
func clickShareBtn(videoInfo: JVSFeedVideoData, isMain: Bool) {
if isMain {
self.channelVC.disLikeVideo(feed: videoInfo)
}
print(">>>>>>>>> clickShareBtn videoID:\(videoInfo.video_id ?? "") isMain: \(isMain)")
}
// 点赞(isPraise:true - 点赞,false - 取消点赞)
func clickPraiseBtn(videoInfo: JVSFeedVideoData, isPraise: Bool, isAD: Bool) {
print(">>>>>>>>> clickPraiseBtn videoID:\(videoInfo.video_id ?? "") isPraise: \(isPraise)")
logData.append("\(isPraise ? "点赞" : "取消点赞")")
logTableView.reloadData()
}
// 进入CP页
func gotoCPPage(videoInfo: JVSFeedVideoData) {
print(">>>>>>>>> gotoCPPage cpID:\(videoInfo.provider?.id ?? "")")
logData.append("进入CP页")
logTableView.reloadData()
UIApplication.shared.windows.last?.addSubview(logTableView)
}
// 进入播放页
func gotoPlayerPage(videoInfo: JVSFeedVideoData) {
print(">>>>>>>>> gotoPlayerPage videoID:\(videoInfo.video_id ?? "")")
logData.append("进入播放页")
logTableView.reloadData()
UIApplication.shared.windows.last?.addSubview(logTableView)
}
// 进入Feed页
func gotoFeedPage(channelID: String) {
logData.append("进入feed页:\(channelID)")
logTableView.reloadData()
}
//广告展现
func adShowWith(ylID: String, reqId: String, type: Int) {
print(">>>>>>>>> adShow ylid: \(ylID) reqid: \(reqId) type: \(type)")
}
// 广告被点击
func adClickWith(ylID: String, reqId: String, type: Int) {
print(">>>>>>>>> adClick ylid: \(ylID) reqid: \(reqId) type: \(type)")
}
此代码块在浮窗中显示
1.5 局部信息流
1.5.1 获取实时热点视频
// 获取热门视频,详细参数参考API文档或者demo实现
JVSService.getHotVideoList(beginTime: 0, endTime: 0, videoType:type ,page: 1,size: 10) { (list,error) in
if list.count == 0{
print("没有数据")
}else{
self.data = list
self.tableView.reloadData()
}
}
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
let video = self.data[indexPath.row]
//视频展现上报
JVSService.reportVideoShowEvent(videoInfo: video, pos: indexPath.row)
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let video = self.data[indexPath.row]
//播放视频
JVSService.openPlayer(videoType: self.type, videoData: video, viewController: self)
//视频点击上报
JVSService.reportVideoClickEvent(videoInfo: video, pos: indexPath.row)
}
// 获取热门视频,详细参数参考API文档或者demo实现
JVSService.getHotVideoList(beginTime: 0, endTime: 0, videoType:type ,page: 1,size: 10) { (list,error) in
if list.count == 0{
print("没有数据")
}else{
self.data = list
self.tableView.reloadData()
}
}
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
let video = self.data[indexPath.row]
//视频展现上报
JVSService.reportVideoShowEvent(videoInfo: video, pos: indexPath.row)
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let video = self.data[indexPath.row]
//播放视频
JVSService.openPlayer(videoType: self.type, videoData: video, viewController: self)
//视频点击上报
JVSService.reportVideoClickEvent(videoInfo: video, pos: indexPath.row)
}
此代码块在浮窗中显示
1.5.2 单卡片信息流
//小视频单卡片,参数给定宽度,高度自适应,详细参数参考API文档或者demo实现
JVSService.showLittleVideoCard(width: width, delegate: self){ (card, error) in
if error == .noError{
self.littleCard?.removeFromSuperview()
self.littleCard = card
let y = CGFloat(298.0)
let x = (self.view.frame.size.width - width)/2
self.littleCard?.frame = CGRect.init(origin: CGPoint.init(x: x, y: y), size: CGSize.init(width: width,height: 300))
self.view.addSubview(self.littleCard!)
}else{
print("网络错误")
}
}
//横版feed视频单卡片,参数给定宽度,高度自适应,详细参数参考API文档,给定宽度高,度自适应
JVSService.showFeedCard(width: 300, delegate: self) { (card, error) in
if error == .noError{
self.feedCard?.removeFromSuperview()
self.feedCard = card
let x = (self.view.frame.size.width - 300)/2
self.feedCard?.frame = CGRect.init(origin: CGPoint.init(x: x, y: 88), size: CGSize.init(width: 300,height: 200))
self.view.addSubview(self.feedCard!)
}else{
print("网络错误")
}
}
//小视频单卡片,参数给定宽度,高度自适应,详细参数参考API文档或者demo实现
JVSService.showLittleVideoCard(width: width, delegate: self){ (card, error) in
if error == .noError{
self.littleCard?.removeFromSuperview()
self.littleCard = card
let y = CGFloat(298.0)
let x = (self.view.frame.size.width - width)/2
self.littleCard?.frame = CGRect.init(origin: CGPoint.init(x: x, y: y), size: CGSize.init(width: width,height: 300))
self.view.addSubview(self.littleCard!)
}else{
print("网络错误")
}
}
//横版feed视频单卡片,参数给定宽度,高度自适应,详细参数参考API文档,给定宽度高,度自适应
JVSService.showFeedCard(width: 300, delegate: self) { (card, error) in
if error == .noError{
self.feedCard?.removeFromSuperview()
self.feedCard = card
let x = (self.view.frame.size.width - 300)/2
self.feedCard?.frame = CGRect.init(origin: CGPoint.init(x: x, y: 88), size: CGSize.init(width: 300,height: 200))
self.view.addSubview(self.feedCard!)
}else{
print("网络错误")
}
}
此代码块在浮窗中显示
1.5.3 多卡片信息流
该功能是往自己的tableView列表中插入小视频信息流,具体使用详见demo
//小视频(竖版视频)多卡片,详细参数参考API文档
JVSService.showLittleVideoCards(num: 5, width: 400, delegate: self) { (card, error) in
if error == .noError{
self.data.insert(card!, at: 3)
self.tableView.reloadData()
}else{
print("网络错误")
}
}
//小视频(竖版视频)多卡片,详细参数参考API文档
JVSService.showLittleVideoCards(num: 5, width: 400, delegate: self) { (card, error) in
if error == .noError{
self.data.insert(card!, at: 3)
self.tableView.reloadData()
}else{
print("网络错误")
}
}
此代码块在浮窗中显示
1.6 登录用户关注页面(v1.1.0 新增)
override func viewDidLoad() {
super.viewDidLoad()
let vc = JVSService.getFollowPageViewController(delegate: self)
self.addChild(vc)
self.view.addSubview(vc.view)
}
override func viewDidLoad() {
super.viewDidLoad()
let vc = JVSService.getFollowPageViewController(delegate: self)
self.addChild(vc)
self.view.addSubview(vc.view)
}
此代码块在浮窗中显示
二、详细API说明
2.1 JVSService 类API
/// 1、初始化SDK
/// - Parameters:
/// - appkey: 极光平台申请的appkey
/// - channelId: 渠道id
@objc public class func setAppkey(appkey:String, channelId:String)
/// 2、开启debug日志接口
/// - Parameter enable: 默认false
@objc public class func setDebug(enable:Bool)
/// 3、检查业务是否可用,回调结果有缓存,24小时更新一次
/// - Parameter callBack: 回调信息
@objc public class func checkBussinessEnable(callBack: @escaping (_ result:Bool,Error?)->Void)
/// 4、获取多频道导航页面
/// - Parameter delegate: 视频广告状态相关的回调
/// - Returns:JVSRootViewController 多频道导航 根视图控制器
@objc public class func getChannelListViewController(delegate:JVSVideoDelegate) -> JVSRootViewController
/// 5、单个频道feed流
/// - Parameters:
/// - delegate: 视频和广告状态相关的回调
/// - channelID:频道id
/// - Returns: JVSFeedListViewController feed流控制器
@objc public class func getOneChannelViewController(delegate:JVSVideoDelegate,channelID:String? = "") -> JVSFeedListViewController
/// 6、类似抖音小视频、单个视频全屏布局
/// - Parameters:
/// - delegate: 视频和广告状态相关的回调
/// - single: 是否是单个视频 默认false
/// - cpInfo: 是否是cp视频 默认false
/// - cpId: cp id
/// - Returns: JVSLittleVideoViewController小视频控制器
@objc public class func getLittleVideoViewController(delegate:JVSVideoDelegate,single:Bool = false,cpInfo:Bool = false,cpId:String? = "") -> JVSLittleVideoViewController
/// 7、类似与快手小视频瀑布流视图布局
/// - Parameter delegate: 视频和广告状态相关的回调
/// - Returns: JVSLittleVideoListController 小视频控制器
@objc public class func getLittleListVideoViewController(delegate:JVSVideoDelegate) -> JVSLittleVideoListController
/// 8、类似与快手小视频瀑布流视图布局-不规则
/// - Parameter delegate: 视频和广告状态相关的回调
/// - Returns: JVSLittleVideoWaterFallViewController 小视频控制器
@objc public class func getWaterLittleListVideoViewController(delegate:JVSVideoDelegate) -> JVSLittleVideoWaterFallViewController
/// 9、用户登录接口
/// - Parameters:
/// - nickname: 昵称
/// - avatar: 头像
/// - phone: 手机号
/// - uid: user id
/// - callback: 结果回调
@objc public class func login(nickname: String, avatar: String, phone: String, uid: String,callback: @escaping (Bool, String) -> Void) {
/// 10、用户登出
@objc public class func logout()
/// 11、保存用户标签
/// - Parameters:
/// - uid: 用户id
/// - userInfo: 用户信息
/// 示例
/// {
/// "gender": "1", 0-未知,1-男性,2-女性
// "age": "18,28" 年龄所在的区间段,以逗号分隔,年龄段的开始和结束值可以相同
// }
@objc public class func setUserTag(uid: String, userInfo: [String: String])
/// 12、切换用户时单独调用
@objc public class func setUid(_ uid: String){
///13、 查询用户登录状态
@objc public class var isLogin:Bool
//14、查询版SDK版本号
@objc public static let sdkVer
/// 15、用户关注的视频主页面,需要调用登录接口,登录成功之后才有数据显示
/// - Parameter delegate: 视频播放相关回调
/// - Returns:JVSFeedListViewController 视图控制器
@objc public class func getFollowPageViewController(delegate:JVSVideoDelegate) -> JVSFeedListViewController
//MARK:-局部信息流
///16、 插入feed信息流卡片
/// - Parameters:
/// - width: 卡片视图宽度,高度自适应
/// - chanleId: 频道id
/// - delegate: 视频播放开始暂停失败等事件的代理
/// - callBack: 回调结果
@objc public class func showFeedCard(width:CGFloat, chanelId:String = "",delegate:JVSVideoDelegate,callBack:@escaping(_ cardView:UIView?,_ error:JVSVideosCardError)->Void)
/// 17、插入只有一个小视频的卡片
/// - Parameters:
/// - width: 卡片视图宽度,高度自适应
/// - delegate: 视频播放开始暂停失败等事件的代理
/// - callBack: 回调结果
@objc public class func showLittleVideoCard(width:CGFloat,delegate:JVSVideoDelegate,callBack:@escaping(_ cardView:UIView?,_ error:JVSVideosCardError)->Void)
///18、 插入含有4个以上小视频的卡片
/// - Parameters:
/// - num: 卡片数量(4-8个 小于4默认4,大于8默认8)
/// - width: 卡片视图宽度,高度自适应
/// - delegate: 视频播放开始暂停失败等事件的代理
/// - callBack: 回调结果
@objc public class func showLittleVideoCards(num:Int = 4,width:CGFloat,delegate:JVSVideoDelegate,callBack:@escaping(_ cardView:UIView?,_ error:JVSVideosCardError)->Void)
// 19、实时热点视频
/**
获取实时热点视频
@param beginTime : 开始时间戳,单位秒(小数点后数值内部自动忽略),默认传0,代表获取最新数据
@param endTime : 结束时间戳,单位秒(小数点后数值内部自动忽略),默认传0,代表获取最新数据
@param videoType : 视频类型 horizontal-横版视频视频 vertical -竖版视频,热点竖视频需要联系商务申请
@param key : 内容池key名,默认传空
@param page : 页数
@param size : 每页返回的内容条数,取值范围:1-100
*/
@objc public class func getHotVideoList(beginTime: TimeInterval, endTime: TimeInterval, videoType:JVSVideoType, key: String = "", page: Int = 1, size: Int = 10, callback: @escaping ([JVSFeedVideoData],_ error:JVSResponseError) -> Void)
///20、 播放视频接口
/// - Parameters:
/// - videoType: 视频类型
/// - videoData: 视频内容数据源
/// - delegate: 代理回调
/// - viewController: 控制器
@objc public class func openPlayer(videoType:JVSVideoType, videoData: JVSFeedVideoData, delegate: JVSVideoDelegate? = nil, viewController: UIViewController)
// MARK:-视频上报相关事件
/// 21、 上报视频显示事件
/// - Parameters:
/// - videoInfo: 视频数据源
/// - pos: 视频显示位置
@objc public class func reportVideoShowEvent(videoInfo: JVSFeedVideoData, pos: Int)
///22、 上报视频点击事件
/// - Parameters:
/// - videoInfo: 视频数据源
/// - pos: 视频显示位置
@objc public class func reportVideoClickEvent(videoInfo: JVSFeedVideoData, pos: Int)
///23、 获取频道列表
/// - Parameters:
/// - videoType: 视频类型
/// - callback: 返回
@objc public func getChannels(videoType:String,callback: @escaping (Bool, [JVSChannelModel]?) -> Void)
///24、 获取小视频信息流
/// - Parameters:
/// - loadType: 加载方式
/// - callback: 返回
@objc public func getLittleVideoList(loadType: JVSFeedLoadType,callback: @escaping (Bool, [JVSFeedVideoData]) -> Void)
/// 1、初始化SDK
/// - Parameters:
/// - appkey: 极光平台申请的appkey
/// - channelId: 渠道id
@objc public class func setAppkey(appkey:String, channelId:String)
/// 2、开启debug日志接口
/// - Parameter enable: 默认false
@objc public class func setDebug(enable:Bool)
/// 3、检查业务是否可用,回调结果有缓存,24小时更新一次
/// - Parameter callBack: 回调信息
@objc public class func checkBussinessEnable(callBack: @escaping (_ result:Bool,Error?)->Void)
/// 4、获取多频道导航页面
/// - Parameter delegate: 视频广告状态相关的回调
/// - Returns:JVSRootViewController 多频道导航 根视图控制器
@objc public class func getChannelListViewController(delegate:JVSVideoDelegate) -> JVSRootViewController
/// 5、单个频道feed流
/// - Parameters:
/// - delegate: 视频和广告状态相关的回调
/// - channelID:频道id
/// - Returns: JVSFeedListViewController feed流控制器
@objc public class func getOneChannelViewController(delegate:JVSVideoDelegate,channelID:String? = "") -> JVSFeedListViewController
/// 6、类似抖音小视频、单个视频全屏布局
/// - Parameters:
/// - delegate: 视频和广告状态相关的回调
/// - single: 是否是单个视频 默认false
/// - cpInfo: 是否是cp视频 默认false
/// - cpId: cp id
/// - Returns: JVSLittleVideoViewController小视频控制器
@objc public class func getLittleVideoViewController(delegate:JVSVideoDelegate,single:Bool = false,cpInfo:Bool = false,cpId:String? = "") -> JVSLittleVideoViewController
/// 7、类似与快手小视频瀑布流视图布局
/// - Parameter delegate: 视频和广告状态相关的回调
/// - Returns: JVSLittleVideoListController 小视频控制器
@objc public class func getLittleListVideoViewController(delegate:JVSVideoDelegate) -> JVSLittleVideoListController
/// 8、类似与快手小视频瀑布流视图布局-不规则
/// - Parameter delegate: 视频和广告状态相关的回调
/// - Returns: JVSLittleVideoWaterFallViewController 小视频控制器
@objc public class func getWaterLittleListVideoViewController(delegate:JVSVideoDelegate) -> JVSLittleVideoWaterFallViewController
/// 9、用户登录接口
/// - Parameters:
/// - nickname: 昵称
/// - avatar: 头像
/// - phone: 手机号
/// - uid: user id
/// - callback: 结果回调
@objc public class func login(nickname: String, avatar: String, phone: String, uid: String,callback: @escaping (Bool, String) -> Void) {
/// 10、用户登出
@objc public class func logout()
/// 11、保存用户标签
/// - Parameters:
/// - uid: 用户id
/// - userInfo: 用户信息
/// 示例
/// {
/// "gender": "1", 0-未知,1-男性,2-女性
// "age": "18,28" 年龄所在的区间段,以逗号分隔,年龄段的开始和结束值可以相同
// }
@objc public class func setUserTag(uid: String, userInfo: [String: String])
/// 12、切换用户时单独调用
@objc public class func setUid(_ uid: String){
///13、 查询用户登录状态
@objc public class var isLogin:Bool
//14、查询版SDK版本号
@objc public static let sdkVer
/// 15、用户关注的视频主页面,需要调用登录接口,登录成功之后才有数据显示
/// - Parameter delegate: 视频播放相关回调
/// - Returns:JVSFeedListViewController 视图控制器
@objc public class func getFollowPageViewController(delegate:JVSVideoDelegate) -> JVSFeedListViewController
//MARK:-局部信息流
///16、 插入feed信息流卡片
/// - Parameters:
/// - width: 卡片视图宽度,高度自适应
/// - chanleId: 频道id
/// - delegate: 视频播放开始暂停失败等事件的代理
/// - callBack: 回调结果
@objc public class func showFeedCard(width:CGFloat, chanelId:String = "",delegate:JVSVideoDelegate,callBack:@escaping(_ cardView:UIView?,_ error:JVSVideosCardError)->Void)
/// 17、插入只有一个小视频的卡片
/// - Parameters:
/// - width: 卡片视图宽度,高度自适应
/// - delegate: 视频播放开始暂停失败等事件的代理
/// - callBack: 回调结果
@objc public class func showLittleVideoCard(width:CGFloat,delegate:JVSVideoDelegate,callBack:@escaping(_ cardView:UIView?,_ error:JVSVideosCardError)->Void)
///18、 插入含有4个以上小视频的卡片
/// - Parameters:
/// - num: 卡片数量(4-8个 小于4默认4,大于8默认8)
/// - width: 卡片视图宽度,高度自适应
/// - delegate: 视频播放开始暂停失败等事件的代理
/// - callBack: 回调结果
@objc public class func showLittleVideoCards(num:Int = 4,width:CGFloat,delegate:JVSVideoDelegate,callBack:@escaping(_ cardView:UIView?,_ error:JVSVideosCardError)->Void)
// 19、实时热点视频
/**
获取实时热点视频
@param beginTime : 开始时间戳,单位秒(小数点后数值内部自动忽略),默认传0,代表获取最新数据
@param endTime : 结束时间戳,单位秒(小数点后数值内部自动忽略),默认传0,代表获取最新数据
@param videoType : 视频类型 horizontal-横版视频视频 vertical -竖版视频,热点竖视频需要联系商务申请
@param key : 内容池key名,默认传空
@param page : 页数
@param size : 每页返回的内容条数,取值范围:1-100
*/
@objc public class func getHotVideoList(beginTime: TimeInterval, endTime: TimeInterval, videoType:JVSVideoType, key: String = "", page: Int = 1, size: Int = 10, callback: @escaping ([JVSFeedVideoData],_ error:JVSResponseError) -> Void)
///20、 播放视频接口
/// - Parameters:
/// - videoType: 视频类型
/// - videoData: 视频内容数据源
/// - delegate: 代理回调
/// - viewController: 控制器
@objc public class func openPlayer(videoType:JVSVideoType, videoData: JVSFeedVideoData, delegate: JVSVideoDelegate? = nil, viewController: UIViewController)
// MARK:-视频上报相关事件
/// 21、 上报视频显示事件
/// - Parameters:
/// - videoInfo: 视频数据源
/// - pos: 视频显示位置
@objc public class func reportVideoShowEvent(videoInfo: JVSFeedVideoData, pos: Int)
///22、 上报视频点击事件
/// - Parameters:
/// - videoInfo: 视频数据源
/// - pos: 视频显示位置
@objc public class func reportVideoClickEvent(videoInfo: JVSFeedVideoData, pos: Int)
///23、 获取频道列表
/// - Parameters:
/// - videoType: 视频类型
/// - callback: 返回
@objc public func getChannels(videoType:String,callback: @escaping (Bool, [JVSChannelModel]?) -> Void)
///24、 获取小视频信息流
/// - Parameters:
/// - loadType: 加载方式
/// - callback: 返回
@objc public func getLittleVideoList(loadType: JVSFeedLoadType,callback: @escaping (Bool, [JVSFeedVideoData]) -> Void)
此代码块在浮窗中显示
2.2 JVSVideoDelegate 视频和广告状态相关的回调
/// 首个视频开始播放(isAD: 是否是广告)
@objc optional func firstPlayerStart(videoInfo: JVSFeedVideoData, isAD: Bool)
/// 视频开始播放
@objc optional func playerStart(videoInfo: JVSFeedVideoData, isAD: Bool)
/// 视频播放暂停状态变化
@objc optional func playerPause(videoInfo: JVSFeedVideoData, isPause: Bool, isAD: Bool)
/// 视频播放结束
@objc optional func playerEnd(videoInfo: JVSFeedVideoData, isAD: Bool)
/// 视频播放失败
@objc optional func playerError(videoInfo: JVSFeedVideoData, error: Error?, isAD: Bool)
/// 广告信息获取成功
@objc optional func ylADInfoLoadSuccess(adID: String)
/// 广告信息获取失败
@objc optional func ylADInfoLoadFail(adID: String, error: Error?)
/// 点击分享按钮(isMain: 竖版视频用来标记是否是首页,仅首页支持负反馈功能)
@objc optional func clickShareBtn(videoInfo: JVSFeedVideoData, isMain: Bool)
/// 点赞(isPraise:true - 点赞,false - 取消点赞)
@objc optional func clickPraiseBtn(videoInfo: JVSFeedVideoData, isPraise: Bool, isAD: Bool)
/// 进入CP页
@objc optional func gotoCPPage(videoInfo: JVSFeedVideoData)
/// 进入播放页
@objc optional func gotoPlayerPage(videoInfo: JVSFeedVideoData)
/// 进入Feed页
@objc optional func gotoFeedPage(channelID: String)
/// YLLittleVideoListController列表滑动
@objc optional func yl_scrollViewDidScroll(_ scrollView: UIScrollView)
/// 广告展现
@objc optional func adShowWith(ylID: String, reqId: String, type: Int)
/// 广告点击
@objc optional func adClickWith(ylID: String, reqId: String, type: Int)
/// 首个视频开始播放(isAD: 是否是广告)
@objc optional func firstPlayerStart(videoInfo: JVSFeedVideoData, isAD: Bool)
/// 视频开始播放
@objc optional func playerStart(videoInfo: JVSFeedVideoData, isAD: Bool)
/// 视频播放暂停状态变化
@objc optional func playerPause(videoInfo: JVSFeedVideoData, isPause: Bool, isAD: Bool)
/// 视频播放结束
@objc optional func playerEnd(videoInfo: JVSFeedVideoData, isAD: Bool)
/// 视频播放失败
@objc optional func playerError(videoInfo: JVSFeedVideoData, error: Error?, isAD: Bool)
/// 广告信息获取成功
@objc optional func ylADInfoLoadSuccess(adID: String)
/// 广告信息获取失败
@objc optional func ylADInfoLoadFail(adID: String, error: Error?)
/// 点击分享按钮(isMain: 竖版视频用来标记是否是首页,仅首页支持负反馈功能)
@objc optional func clickShareBtn(videoInfo: JVSFeedVideoData, isMain: Bool)
/// 点赞(isPraise:true - 点赞,false - 取消点赞)
@objc optional func clickPraiseBtn(videoInfo: JVSFeedVideoData, isPraise: Bool, isAD: Bool)
/// 进入CP页
@objc optional func gotoCPPage(videoInfo: JVSFeedVideoData)
/// 进入播放页
@objc optional func gotoPlayerPage(videoInfo: JVSFeedVideoData)
/// 进入Feed页
@objc optional func gotoFeedPage(channelID: String)
/// YLLittleVideoListController列表滑动
@objc optional func yl_scrollViewDidScroll(_ scrollView: UIScrollView)
/// 广告展现
@objc optional func adShowWith(ylID: String, reqId: String, type: Int)
/// 广告点击
@objc optional func adClickWith(ylID: String, reqId: String, type: Int)
此代码块在浮窗中显示
2.3 JVSRootViewController类API
是横视频UI页入口类,带多频道水平导航的UI界面,UIViewController类型,可以方便的嵌入用户App中,频道里面是feed流视频列表
// 1、视频和广告状态相关回调代理
@objc public weak var delegate: JVSVideoDelegate?
/// 2、当前频道滚动到顶部,设置是否刷新
/// pullRefresh: 是否刷新
@objc public func scrollToTop(pullRefresh: Bool = false)
/// 3、视频负反馈接口
@objc public func disLikeVideo(feed: JVSFeedVideoData)
// 1、视频和广告状态相关回调代理
@objc public weak var delegate: JVSVideoDelegate?
/// 2、当前频道滚动到顶部,设置是否刷新
/// pullRefresh: 是否刷新
@objc public func scrollToTop(pullRefresh: Bool = false)
/// 3、视频负反馈接口
@objc public func disLikeVideo(feed: JVSFeedVideoData)
此代码块在浮窗中显示
2.4 JVSFeedListViewController 类API
某单一频道fee流页面视图控制器类,可单独使用。
// 1、频道id ,用来获取频道内容feed流
@objc public var channelID: String?
// 2、视频和广告状态相关回调代理
@objc public weak var delegate: JVSVideoDelegate?
/// 3、当前频道滚动到顶部,设置是否刷新
/// pullRefresh: 是否刷新
@objc public func scrollToTop(pullRefresh: Bool = false)
/// 4、视频负反馈接口
@objc public func disLikeVideo(feed: JVSFeedVideoData)
// 1、频道id ,用来获取频道内容feed流
@objc public var channelID: String?
// 2、视频和广告状态相关回调代理
@objc public weak var delegate: JVSVideoDelegate?
/// 3、当前频道滚动到顶部,设置是否刷新
/// pullRefresh: 是否刷新
@objc public func scrollToTop(pullRefresh: Bool = false)
/// 4、视频负反馈接口
@objc public func disLikeVideo(feed: JVSFeedVideoData)
此代码块在浮窗中显示
2.5 JVSLittleVideoViewController 类API
类似抖音的竖屏视频页面的视图控制器
// 1、视频和广告状态相关回调代理
@objc public weak var delegate: JVSVideoDelegate?
// 2、是否播放单个视频
var single = false
//3、是否是cp视频
var cpInfo = false
//4、为cp视频时的cpid
var cpID: String?
// 5、对当前视频进行负反馈
@objc public func disLikeVideo()
// 1、视频和广告状态相关回调代理
@objc public weak var delegate: JVSVideoDelegate?
// 2、是否播放单个视频
var single = false
//3、是否是cp视频
var cpInfo = false
//4、为cp视频时的cpid
var cpID: String?
// 5、对当前视频进行负反馈
@objc public func disLikeVideo()
此代码块在浮窗中显示
2.6 JVSLittleVideoListController 类API
小视频瀑布流布局,类似快手的竖屏视频列表页面。
// 1、视频和广告状态相关回调代理
@objc public weak var delegate: JVSVideoDelegate?
// 1、视频和广告状态相关回调代理
@objc public weak var delegate: JVSVideoDelegate?
此代码块在浮窗中显示
2.7 JVSFeedVideoData 类API
单个视频具体信息类
/// 1、视频ID
@objc public var video_id: String?
/// 2、标题
@objc public var title: String?
/// 3、标签
@objc public var tags: String?
/// 4、分类
@objc public var category: String?
/// 5、频道ID
@objc public var channel_id: String?
/// 6、 是否精选
@objc public var is_choice: String?
/// 7、分享时H5播放页
@objc public var shareUrl: String
/// 8、封面图
@objc public var image: String?
/// 9、播放时长
@objc public var duration: String?
/// 10、内容提供者
@objc public var provider: JVSVideoProvider?
/// 11、视频内容宽
@objc public var video_w: String?
/// 12、视频内容高
@objc public var video_h: String?
/// 13、播放数
@objc public var play_num: String?
/// 14、点赞数
@objc public var like_num: String?
/// 15、评论数
@objc public var comment_num: String?
/// 16、是否点赞
@objc public var is_like: String?
/// 1、视频ID
@objc public var video_id: String?
/// 2、标题
@objc public var title: String?
/// 3、标签
@objc public var tags: String?
/// 4、分类
@objc public var category: String?
/// 5、频道ID
@objc public var channel_id: String?
/// 6、 是否精选
@objc public var is_choice: String?
/// 7、分享时H5播放页
@objc public var shareUrl: String
/// 8、封面图
@objc public var image: String?
/// 9、播放时长
@objc public var duration: String?
/// 10、内容提供者
@objc public var provider: JVSVideoProvider?
/// 11、视频内容宽
@objc public var video_w: String?
/// 12、视频内容高
@objc public var video_h: String?
/// 13、播放数
@objc public var play_num: String?
/// 14、点赞数
@objc public var like_num: String?
/// 15、评论数
@objc public var comment_num: String?
/// 16、是否点赞
@objc public var is_like: String?
此代码块在浮窗中显示
2.8 JVSVideoProvider 类API
视频内容提供者类
/// 1、视频提供者ID
@objc public var id: String?
/// 2、名字
@objc public var name: String?
/// 3、头像
@objc public var avatar: String?
/// 4、简介
@objc public var aword: String?
/// 5、视频数
@objc public var videos: String?
/// 6、粉丝数
@objc public var fans: String?
/// 7、是否已关注
@objc public var islike: String?
/// 8、CP类型(1:短视频,2:小视频)
@objc public var type: String?
/// 1、视频提供者ID
@objc public var id: String?
/// 2、名字
@objc public var name: String?
/// 3、头像
@objc public var avatar: String?
/// 4、简介
@objc public var aword: String?
/// 5、视频数
@objc public var videos: String?
/// 6、粉丝数
@objc public var fans: String?
/// 7、是否已关注
@objc public var islike: String?
/// 8、CP类型(1:短视频,2:小视频)
@objc public var type: String?
此代码块在浮窗中显示
2.9 JVSUIConfig 类API
UI界面配置类,设置视频UI界面
/// 播放页类型
@objc public enum JVSPlayPageType: Int {
/// 播放页类型-h5
case web
/// 播放页类型-相关视频
case relation
/// 播放页类型-feed流
case feed
/// 当前页播放
case direct
/// 当前页自动播放
case auto
}
/// 评论展示类型
@objc public enum JVSLittleCommentType: Int {
/// 只能看不能评论
case read
/// 支持看和写评论
case readWrite
/// 不显示评论功能
case none
}
/// 小视频播放器填充类型
@objc public enum JVSLittlePlayerContentMode: Int {
/// 非等比例填充,拉伸视频直至两个维度填满播放器区域
case resize
/// 等比例填充,直到一个维度填满播放器区域,其中一个维度可能会出现黑边
case resizeAspect
/// 等比例填充,直到两个维度都填满播放器区域,其中一个维度部分区域可能会被裁剪
case resizeAspectFill
}
/*----------------- 横版视频配置项 -----------------*/
/// 播放页类型(默认:相关视频;局部信息流不支持当前页播放形式)
@objc public static var playPageType: JVSPlayPageType = .relation
/// 是否响应点击头像跳转CP页(默认响应)
@objc public static var cpInfoResponse = true
/// 评论展示类型(默认不显示)
@objc public static var commentType: JVSLittleCommentType = .none
/// 是否显示分享按钮
@objc public static var showShare = false
/// 是否显示关注按钮
@objc public static var showFollow = false
/// 是否显示关注页面
@objc public static var showFollowPage = false
// 是否显示横屏按钮(默认显示 v1.1.0新增)
JVSUIConfig.showFullBtn = true
/*----------------- 竖版视频配置项 -----------------*/
/// 小视频评论展示类型(默认不显示)
@objc public static var littleCommentType: JVSLittleCommentType = .none
/// 小视频播放器填充类型(默认resizeAspect)
@objc public static var playerContentMode: JVSLittlePlayerContentMode = .resizeAspect
/// 小视频点赞等按钮位于底部(默认右边)
@objc public static var bottomPanel = false
/// 小视频是否显示分享按钮
@objc public static var littleShowShare = false
/// 小视频是否响应点击头像跳转CP页(默认响应)
@objc public static var littleCpInfoResponse = true
/*-----------------以下为v1.1.0竖版视频配置新增属性-----------------*/
// 小视频是否显示相关视频按钮(默认显示)
JVSUIConfig.littleShowRelation = true
//小视频是否自动播放下一个(默认自动播放)
JVSUIConfig.littleAutoPlayNext = true
// 小视频title和description距离底部的距离,默认57
JVSUIConfig.littleTitleMargin = 57.0
// 小视频右边按钮最下面的按钮距离底部的距离,默认42
JVSUIConfig.littleRightMargin = 42.0
// 小视频底部话题距离底部的距离,默认0
JVSUIConfig.littleTopicMargin = 0.0
/// 播放页类型
@objc public enum JVSPlayPageType: Int {
/// 播放页类型-h5
case web
/// 播放页类型-相关视频
case relation
/// 播放页类型-feed流
case feed
/// 当前页播放
case direct
/// 当前页自动播放
case auto
}
/// 评论展示类型
@objc public enum JVSLittleCommentType: Int {
/// 只能看不能评论
case read
/// 支持看和写评论
case readWrite
/// 不显示评论功能
case none
}
/// 小视频播放器填充类型
@objc public enum JVSLittlePlayerContentMode: Int {
/// 非等比例填充,拉伸视频直至两个维度填满播放器区域
case resize
/// 等比例填充,直到一个维度填满播放器区域,其中一个维度可能会出现黑边
case resizeAspect
/// 等比例填充,直到两个维度都填满播放器区域,其中一个维度部分区域可能会被裁剪
case resizeAspectFill
}
/*----------------- 横版视频配置项 -----------------*/
/// 播放页类型(默认:相关视频;局部信息流不支持当前页播放形式)
@objc public static var playPageType: JVSPlayPageType = .relation
/// 是否响应点击头像跳转CP页(默认响应)
@objc public static var cpInfoResponse = true
/// 评论展示类型(默认不显示)
@objc public static var commentType: JVSLittleCommentType = .none
/// 是否显示分享按钮
@objc public static var showShare = false
/// 是否显示关注按钮
@objc public static var showFollow = false
/// 是否显示关注页面
@objc public static var showFollowPage = false
// 是否显示横屏按钮(默认显示 v1.1.0新增)
JVSUIConfig.showFullBtn = true
/*----------------- 竖版视频配置项 -----------------*/
/// 小视频评论展示类型(默认不显示)
@objc public static var littleCommentType: JVSLittleCommentType = .none
/// 小视频播放器填充类型(默认resizeAspect)
@objc public static var playerContentMode: JVSLittlePlayerContentMode = .resizeAspect
/// 小视频点赞等按钮位于底部(默认右边)
@objc public static var bottomPanel = false
/// 小视频是否显示分享按钮
@objc public static var littleShowShare = false
/// 小视频是否响应点击头像跳转CP页(默认响应)
@objc public static var littleCpInfoResponse = true
/*-----------------以下为v1.1.0竖版视频配置新增属性-----------------*/
// 小视频是否显示相关视频按钮(默认显示)
JVSUIConfig.littleShowRelation = true
//小视频是否自动播放下一个(默认自动播放)
JVSUIConfig.littleAutoPlayNext = true
// 小视频title和description距离底部的距离,默认57
JVSUIConfig.littleTitleMargin = 57.0
// 小视频右边按钮最下面的按钮距离底部的距离,默认42
JVSUIConfig.littleRightMargin = 42.0
// 小视频底部话题距离底部的距离,默认0
JVSUIConfig.littleTopicMargin = 0.0
此代码块在浮窗中显示
2.10 插入自定义view
2.10.1 横视频插入
需要继承实现代理: JVSFeedInsertCustomViewDelegate
/**
* 由于顶部刷新而清空数据源
*/
@objc optional func ylFeedwasRemoveAll()
/**
* 已经占位
*/
@objc optional func ylFeeddidInsertCustomViewModel(index:Int)
/**
* 返回具体View
*/
@objc optional func ylFeedcustomViewForRowAt(index:Int)->UIView
/**
* customView展现的高度
*/
@objc optional func ylFeedheightForRowAt(index:Int)->CGFloat
/**
* 点击了customView所在的Cell
*/
@objc optional func ylFeeddidSelectCustomview(index:Int)
/**
* 由于顶部刷新而清空数据源
*/
@objc optional func ylFeedwasRemoveAll()
/**
* 已经占位
*/
@objc optional func ylFeeddidInsertCustomViewModel(index:Int)
/**
* 返回具体View
*/
@objc optional func ylFeedcustomViewForRowAt(index:Int)->UIView
/**
* customView展现的高度
*/
@objc optional func ylFeedheightForRowAt(index:Int)->CGFloat
/**
* 点击了customView所在的Cell
*/
@objc optional func ylFeeddidSelectCustomview(index:Int)
此代码块在浮窗中显示
2.10.2 横视频插入(多频道)
JVSRootViewController
/// -insertDelegate: 插入自定义View相关的回调 JVSFeedInsertCustomViewDelegate
self.channelVC = JVSService.getChannelListViewController(delegate: self,insertDelegate: self)
// 插入自定义UI的起始位置
self.channelVC.startInsertOffset = 2;
// 插入自定义UI的间隔
self.channelVC.insertInterval = 2;
/// -insertDelegate: 插入自定义View相关的回调 JVSFeedInsertCustomViewDelegate
self.channelVC = JVSService.getChannelListViewController(delegate: self,insertDelegate: self)
// 插入自定义UI的起始位置
self.channelVC.startInsertOffset = 2;
// 插入自定义UI的间隔
self.channelVC.insertInterval = 2;
此代码块在浮窗中显示
2.10.3 横视频插入(单频道)
JVSFeedListViewController
/// - Parameter insertDelegate: 插入自定义View相关的回调 JVSFeedInsertCustomViewDelegate
self.channelVC = JVSService.getOneChannelViewController(delegate: self,insertDelegate: self)
// 插入自定义UI的起始位置
self.channelVC.startInsertOffset = 2;
// 插入自定义UI的间隔
self.channelVC.insertInterval = 2;
/// - Parameter insertDelegate: 插入自定义View相关的回调 JVSFeedInsertCustomViewDelegate
self.channelVC = JVSService.getOneChannelViewController(delegate: self,insertDelegate: self)
// 插入自定义UI的起始位置
self.channelVC.startInsertOffset = 2;
// 插入自定义UI的间隔
self.channelVC.insertInterval = 2;
此代码块在浮窗中显示
2.10.4 竖视频插入
需要继承实现代理: JVSLittleInsertCustomViewDelegate
/**
* 由于顶部刷新而清空数据源
*/
@objc optional func ylLittlewasRemoveAll()
/**
* 已经占位
*/
@objc optional func ylLittledidInsertCustomViewModel(index:Int)
/**
* 返回具体View
*/
@objc optional func ylLittlecustomViewForRowAt(index:Int)->UIView
/**
* 点击了customView所在的Cell
*/
@objc optional func ylLittledidSelectCustomview(index:Int)
/**
* 由于顶部刷新而清空数据源
*/
@objc optional func ylLittlewasRemoveAll()
/**
* 已经占位
*/
@objc optional func ylLittledidInsertCustomViewModel(index:Int)
/**
* 返回具体View
*/
@objc optional func ylLittlecustomViewForRowAt(index:Int)->UIView
/**
* 点击了customView所在的Cell
*/
@objc optional func ylLittledidSelectCustomview(index:Int)
此代码块在浮窗中显示
2.10.5 JVSLittleVideoViewController
/// - Parameter insertDelegate: 插入自定义View相关的回调 JVSLittleInsertCustomViewDelegate
self.channelVC = JVSService.getLittleVideoViewController(delegate: self,insertDelegate: self)
// 插入自定义UI的起始位置
self.channelVC.startInsertOffset = 2;
// 插入自定义UI的间隔
self.channelVC.insertInterval = 2;
/// - Parameter insertDelegate: 插入自定义View相关的回调 JVSLittleInsertCustomViewDelegate
self.channelVC = JVSService.getLittleVideoViewController(delegate: self,insertDelegate: self)
// 插入自定义UI的起始位置
self.channelVC.startInsertOffset = 2;
// 插入自定义UI的间隔
self.channelVC.insertInterval = 2;
此代码块在浮窗中显示
文档内容是否对您有帮助?