iOS JUnion SDK API文档

Vaas

一、 SDK接口类说明

  1. JUService:包含SDK功能服务的大部分接口。
  2. JUVideoDelegate: 视频流页面的代理回调,包含三个方面的回调。一个是视频播放相关事件,包含开始播放、暂停、播放结束、播放失败、;另个一个方面是用户对视频操作相关行为回调,包含点赞、取消点赞、分享;还有一个方面是广告相关的回调,包含,广告展现、广告点击、广告获取成功、广告获取失败。
  3. JURootViewController:横视频UI页入口,带频道和水平导航的UI,UIViewController类型,可以方便的嵌入用户App中,频道里面是feed流视频列表。
  4. JUFeedListViewController:某单一频道fee流页面。
  5. JULittleVideoViewController: 类似抖音的竖屏视频页面。
  6. JULittleVideoListController:小视频瀑布流布局,类似快手的竖屏视频列表页面。
  7. JUFeedVideoData:单个视频具体信息类
  8. JUVideoProvider:视频内容提供者类
  9. 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


Copyright 2011-2020, jiguang.cn, All Rights Reserved.
粤ICP备12056275号-13 深圳市和讯华谷信息技术有限公司

Documentation built with MkDocs.