iOS JUnion SDK API文档
Vaas
一、 SDK接口类说明
- JUService:包含SDK功能服务的大部分接口。
- JUVideoDelegate: 视频流页面的代理回调,包含三个方面的回调。一个是视频播放相关事件,包含开始播放、暂停、播放结束、播放失败、;另个一个方面是用户对视频操作相关行为回调,包含点赞、取消点赞、分享;还有一个方面是广告相关的回调,包含,广告展现、广告点击、广告获取成功、广告获取失败。
- JURootViewController:横视频UI页入口,带频道和水平导航的UI,UIViewController类型,可以方便的嵌入用户App中,频道里面是feed流视频列表。
- JUFeedListViewController:某单一频道fee流页面。
- JULittleVideoViewController: 类似抖音的竖屏视频页面。
- JULittleVideoListController:小视频瀑布流布局,类似快手的竖屏视频列表页面。
- JUFeedVideoData:单个视频具体信息类
- JUVideoProvider:视频内容提供者类
- JUUIConfig:UI界面配置类,设置视频UI界面
1.1 在使用SDK的类中添加引用:
只需在类中添加如下引用即可使用SDK所有功能,无需引用JUService等对应的类。
OC项目: #import
Swift项目: import JUnion
1.2 初始化SDK及SDK配置等
在程序刚启动时, 调JUnion SDK其他功能之前,调初始化代码。
/// 初始化SDK
/// - Parameters:
/// - appkey: 极光平台申请的appkey
/// - channelId: 渠道id
JUService.setAppkey(appkey: "您在极光官网申请的Appkey", channelId: "apple")
/**
保存用户标签
@param uid:用户id
@param userInfo:用户信息
示例:
{
"gender": "1", 0-未知,1-男性,2-女性
"age": "18,28" 年龄所在的区间段,以逗号分隔,年龄段的开始和结束值可以相同
}
*/
JUService.setUserTag(uid:"",userInfo:["gender": "1", "age":"18"])
/// 检查业务是否可用,回调结果有缓存,24小时更新一次,setAppkey接口调用之后使用才生效。
/// - Parameter callBack: 回调信息,result 是否可用,eror错误信息
JUService.checkBussinessEnable { (result, eror) in
}
1.3 接入用户系统
/// 用户登录接口
/// - Parameters:
/// - nickname: 昵称
/// - avatar: 头像 url地址
/// - phone: 手机号
/// - userid: 用户 id
/// - callback: 结果回调,成功失败,msg详细信息
JUService.login(nickname: "Alan", avatar: "头像 url地址", phone: ""手机号,未传手机号不可评论", userid: "用户ID") { (result, msg) in
}
// 用户退出登录
JUService.logout()
// 查询用户登录状态
BOOL isLogin = JUService.isLogin
// 切换用户时单独调用
JUService.setUid("xxx")
1.4嵌入UI
接入JURootViewController、JULittleVideoViewController等类时,建议使用childViewController的方式接入,以便调整frame来快速适配不同的项目结构。
// 为兼容iOS9设备中,scrollView特定情况下自动向下偏移一段距离的问题,建议使用时在viewController中加入以下代码
self.automaticallyAdjustsScrollViewInsets = NO;
1.4.1 自定义UI设置
JUUIConfig是UI界面配置类,设置视频UI界面可以通过下面的示例配置
// CP信息页是否显示关注按钮(默认隐藏)
JUUIConfig.showFollow = true;
/*----------------- 横版视频配置项 -----------------*/
// 播放页类型(默认:相关视频;局部信息流不支持当前页播放形式)
JUUIConfig.playPageType = .relation
// 是否响应点击头像跳转CP页(默认响应)
JUUIConfig.cpInfoResponse = true
// 评论展示类型(默认不显示)
JUUIConfig.commentType = .none
// 是否显示分享按钮(默认不显示)
JUUIConfig.showShare = true
/*----------------- 竖版视频配置项 -----------------*/
// 评论展示类型(默认不显示)
JUUIConfig.littleCommentType = .none
// 播放器填充类型(默认resizeAspect)
JJUUIConfig.playerContentMode = .resizeAspectFill
// 点赞等按钮位于底部(默认右边)
JUUIConfig.bottomPanel = false;
// 是否显示分享按钮(默认不显示)
JUUIConfig.littleShowShare = true
// 是否响应点击头像跳转CP页(默认响应)
JUUIConfig.littleCpInfoResponse = true
1.4.2 嵌入多个频道导航的类:JURootViewController
1.4.2.1 添加 rootViewController
var channelVC:JURootViewController!
//// delegate 是横版视频状态等回调信息(详见3.6),self 是UIViewController的一个实例
self.channelVC = JUService.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)
1.4.3 单一频道类:JUFeedListViewController
1.4.3.1 添加单个频道
var channel:JUFeedListViewController!
//// delegate 是横版视频状态等回调信息(详见3.6),self 是UIViewController的一个实例
self.channel = JUService.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)
1.4.4 横版视频状态等回调信息:JUVideoDelegate
//视频开始播放(isAD: 是否是广告)
func playerStart(videoInfo: JUFeedVideoData, isAD: Bool) {
print(">>>>>>>>> playerStart videoID:\(videoInfo.video_id ?? "")")
}
// 视频播放暂停状态变化
func playerPause(videoInfo: JUFeedVideoData, isPause: Bool, isAD: Bool) {
print(">>>>>>>>> playerPause videoID:\(videoInfo.video_id ?? "") isPause:\(isPause)")
logData.append("\(isPause ? "视频暂停" : "视频播放")")
logTableView.reloadData()
}
// 视频播放结束
func playerEnd(videoInfo: JUFeedVideoData, isAD: Bool) {
print(">>>>>>>>> playerEnd videoID:\(videoInfo.video_id ?? "")")
}
// 视频播放失败
func playerError(videoInfo: JUFeedVideoData, error: Error?, isAD: Bool) {
print(">>>>>>>>> playerError videoID:\(videoInfo.video_id ?? "")")
}
//点击分享按钮(isMain: 竖版视频用来标记是否是首页,仅首页支持负反馈功能)
func clickShareBtn(videoInfo: JUFeedVideoData, isMain: Bool) {
if isMain {
self.channelVC.disLikeVideo(feed: videoInfo)
}
print(">>>>>>>>> clickShareBtn videoID:\(videoInfo.video_id ?? "") isMain: \(isMain)")
}
// 点赞(isPraise:true - 点赞,false - 取消点赞)
func clickPraiseBtn(videoInfo: JUFeedVideoData, isPraise: Bool, isAD: Bool) {
print(">>>>>>>>> clickPraiseBtn videoID:\(videoInfo.video_id ?? "") isPraise: \(isPraise)")
logData.append("\(isPraise ? "点赞" : "取消点赞")")
logTableView.reloadData()
}
// 进入CP页
func gotoCPPage(videoInfo: JUFeedVideoData) {
print(">>>>>>>>> gotoCPPage cpID:\(videoInfo.provider?.id ?? "")")
logData.append("进入CP页")
logTableView.reloadData()
UIApplication.shared.windows.last?.addSubview(logTableView)
}
// 进入播放页
func gotoPlayerPage(videoInfo: JUFeedVideoData) {
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 类似抖音的竖屏视频页面:JULittleVideoViewController
var littleVc: JULittleVideoViewController!
// delegate小视频视频状态及广告加载等回调信息(详见4.7),self是UIviewController的一个实例
littleVc = JUService.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 类似快手的竖屏视频列表页面:JULittleVideoListController
var littleListVc: JULittleVideoListController!
// delegate 小视频视频状态及广告加载等回调信息(详见4.7)
littleListVc = JUService.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.7 小视频视频状态及广告加载等回调信息:JUVideoDelegate
// 首个视频开始播放(isAD: 是否是广告)
func firstPlayerStart(videoInfo: JUFeedVideoData, isAD: Bool) {
print(">>>>>>>>> firstPlayerStart videoID:\(videoInfo.video_id ?? "")")
}
//视频开始播放(isAD: 是否是广告)
func playerStart(videoInfo: JUFeedVideoData, isAD: Bool) {
print(">>>>>>>>> playerStart videoID:\(videoInfo.video_id ?? "")")
}
// 视频播放暂停状态变化
func playerPause(videoInfo: JUFeedVideoData, isPause: Bool, isAD: Bool) {
print(">>>>>>>>> playerPause videoID:\(videoInfo.video_id ?? "") isPause:\(isPause)")
logData.append("\(isPause ? "视频暂停" : "视频播放")")
logTableView.reloadData()
}
// 视频播放结束
func playerEnd(videoInfo: JUFeedVideoData, isAD: Bool) {
print(">>>>>>>>> playerEnd videoID:\(videoInfo.video_id ?? "")")
}
// 视频播放失败
func playerError(videoInfo: JUFeedVideoData, 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: JUFeedVideoData, isMain: Bool) {
if isMain {
self.channelVC.disLikeVideo(feed: videoInfo)
}
print(">>>>>>>>> clickShareBtn videoID:\(videoInfo.video_id ?? "") isMain: \(isMain)")
}
// 点赞(isPraise:true - 点赞,false - 取消点赞)
func clickPraiseBtn(videoInfo: JUFeedVideoData, isPraise: Bool, isAD: Bool) {
print(">>>>>>>>> clickPraiseBtn videoID:\(videoInfo.video_id ?? "") isPraise: \(isPraise)")
logData.append("\(isPraise ? "点赞" : "取消点赞")")
logTableView.reloadData()
}
// 进入CP页
func gotoCPPage(videoInfo: JUFeedVideoData) {
print(">>>>>>>>> gotoCPPage cpID:\(videoInfo.provider?.id ?? "")")
logData.append("进入CP页")
logTableView.reloadData()
UIApplication.shared.windows.last?.addSubview(logTableView)
}
// 进入播放页
func gotoPlayerPage(videoInfo: JUFeedVideoData) {
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)")
}
二、详细API说明
2.1 JUService 类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:JURootViewController 多频道导航 根视图控制器
@objc public class func getChannelListViewController(delegate:JUVideoDelegate) -> JURootViewController
/// 5、单个频道feed流
/// - Parameters:
/// - delegate: 视频和广告状态相关的回调
/// - channelID:频道id
/// - Returns: JUFeedListViewController feed流控制器
@objc public class func getOneChannelViewController(delegate:JUVideoDelegate,channelID:String? = "") -> JUFeedListViewController
/// 6、类似抖音小视频、单个视频全屏布局
/// - Parameters:
/// - delegate: 视频和广告状态相关的回调
/// - single: 是否是单个视频 默认false
/// - cpInfo: 是否是cp视频 默认false
/// - cpId: cp id
/// - Returns: JULittleVideoViewController小视频控制器
@objc public class func getLittleVideoViewController(delegate:JUVideoDelegate,single:Bool = false,cpInfo:Bool = false,cpId:String? = "") -> JULittleVideoViewController
/// 7、类似与快手小视频瀑布流视图布局
/// - Parameter delegate: 视频和广告状态相关的回调
/// - Returns: JULittleVideoListController 小视频控制器
@objc public class func getLittleListVideoViewController(delegate:JUVideoDelegate) -> JULittleVideoListController
/// 8、用户登录接口
/// - 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) {
/// 9、用户登出
@objc public class func logout()
/// 10、保存用户标签
/// - Parameters:
/// - uid: 用户id
/// - userInfo: 用户信息
/// 示例
/// {
/// "gender": "1", 0-未知,1-男性,2-女性
// "age": "18,28" 年龄所在的区间段,以逗号分隔,年龄段的开始和结束值可以相同
// }
@objc public class func setUserTag(uid: String, userInfo: [String: String])
/// 11、切换用户时单独调用
@objc public class func setUid(_ uid: String){
///12、 查询用户登录状态
@objc public class var isLogin:Bool
//13、查询版SDK版本号
@objc public static let sdkVer
2.2 JUVideoDelegate 视频和广告状态相关的回调
/// 首个视频开始播放(isAD: 是否是广告)
@objc optional func firstPlayerStart(videoInfo: JUFeedVideoData, isAD: Bool)
/// 视频开始播放
@objc optional func playerStart(videoInfo: JUFeedVideoData, isAD: Bool)
/// 视频播放暂停状态变化
@objc optional func playerPause(videoInfo: JUFeedVideoData, isPause: Bool, isAD: Bool)
/// 视频播放结束
@objc optional func playerEnd(videoInfo: JUFeedVideoData, isAD: Bool)
/// 视频播放失败
@objc optional func playerError(videoInfo: JUFeedVideoData, error: Error?, isAD: Bool)
/// 广告信息获取成功
@objc optional func ylADInfoLoadSuccess(adID: String)
/// 广告信息获取失败
@objc optional func ylADInfoLoadFail(adID: String, error: Error?)
/// 点击分享按钮(isMain: 竖版视频用来标记是否是首页,仅首页支持负反馈功能)
@objc optional func clickShareBtn(videoInfo: JUFeedVideoData, isMain: Bool)
/// 点赞(isPraise:true - 点赞,false - 取消点赞)
@objc optional func clickPraiseBtn(videoInfo: JUFeedVideoData, isPraise: Bool, isAD: Bool)
/// 进入CP页
@objc optional func gotoCPPage(videoInfo: JUFeedVideoData)
/// 进入播放页
@objc optional func gotoPlayerPage(videoInfo: JUFeedVideoData)
/// 进入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 JURootViewController类API
是横视频UI页入口类,带多频道水平导航的UI界面,UIViewController类型,可以方便的嵌入用户App中,频道里面是feed流视频列表
// 1、视频和广告状态相关回调代理
@objc public weak var delegate: JUVideoDelegate?
/// 2、当前频道滚动到顶部,设置是否刷新
/// pullRefresh: 是否刷新
@objc public func scrollToTop(pullRefresh: Bool = false)
/// 3、视频负反馈接口
@objc public func disLikeVideo(feed: JUFeedVideoData)
2.4 JUFeedListViewController 类API
某单一频道fee流页面视图控制器类,可单独使用。
// 1、频道id ,用来获取频道内容feed流
@objc public var channelID: String?
// 2、视频和广告状态相关回调代理
@objc public weak var delegate: JUVideoDelegate?
/// 3、当前频道滚动到顶部,设置是否刷新
/// pullRefresh: 是否刷新
@objc public func scrollToTop(pullRefresh: Bool = false)
/// 4、视频负反馈接口
@objc public func disLikeVideo(feed: JUFeedVideoData)
2.5 JULittleVideoViewController 类API
类似抖音的竖屏视频页面的视图控制器
// 1、视频和广告状态相关回调代理
@objc public weak var delegate: JUVideoDelegate?
// 2、是否播放单个视频
var single = false
//3、是否是cp视频
var cpInfo = false
//4、为cp视频时的cpid
var cpID: String?
// 5、对当前视频进行负反馈
@objc public func disLikeVideo()
2.6 JULittleVideoListController 类API
小视频瀑布流布局,类似快手的竖屏视频列表页面。
// 1、视频和广告状态相关回调代理
@objc public weak var delegate: JUVideoDelegate?
2.7 JUFeedVideoData 类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: JUVideoProvider?
/// 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 JUVideoProvider 类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?
2.9 JUUIConfig 类API
UI界面配置类,设置视频UI界面
/// 播放页类型
@objc public enum JUPlayPageType: Int {
/// 播放页类型-h5
case web
/// 播放页类型-相关视频
case relation
/// 播放页类型-feed流
case feed
/// 当前页播放
case direct
}
/// 评论展示类型
@objc public enum JULittleCommentType: Int {
/// 只能看不能评论
case read
/// 支持看和写评论
case readWrite
/// 不显示评论功能
case none
}
/// 小视频播放器填充类型
@objc public enum JULittlePlayerContentMode: Int {
/// 非等比例填充,拉伸视频直至两个维度填满播放器区域
case resize
/// 等比例填充,直到一个维度填满播放器区域,其中一个维度可能会出现黑边
case resizeAspect
/// 等比例填充,直到两个维度都填满播放器区域,其中一个维度部分区域可能会被裁剪
case resizeAspectFill
}
/*----------------- 横版视频配置项 -----------------*/
/// 播放页类型(默认:相关视频;局部信息流不支持当前页播放形式)
@objc public static var playPageType: JUPlayPageType = .relation
/// 是否响应点击头像跳转CP页(默认响应)
@objc public static var cpInfoResponse = true
/// 评论展示类型(默认不显示)
@objc public static var commentType: JULittleCommentType = .none
/// 是否显示分享按钮
@objc public static var showShare = false
/// 是否显示关注按钮
@objc public static var showFollow = false
/// 是否显示关注页面
@objc public static var showFollowPage = false
/*----------------- 竖版视频配置项 -----------------*/
/// 小视频评论展示类型(默认不显示)
@objc public static var littleCommentType: JULittleCommentType = .none
/// 小视频播放器填充类型(默认resizeAspect)
@objc public static var playerContentMode: JULittlePlayerContentMode = .resizeAspect
/// 小视频点赞等按钮位于底部(默认右边)
@objc public static var bottomPanel = false
/// 小视频是否显示分享按钮
@objc public static var littleShowShare = false
/// 小视频是否响应点击头像跳转CP页(默认响应)
@objc public static var littleCpInfoResponse = true