视频内容
视频内容
ZJContentPage接入注意事项
- 由于内容包没有放在 CocoaPods 的公共仓库,需要⾃⾏将 podspec ⽂件放⼊⼯程⾥,然后在 Podfile ⾥指定路径,参考如下:
pod 'KSAdSDK', :path => '../ZJSDK/ZJSDKModuleKS/KS'
- 如不是通过pod导入,打包发布之前,需要去掉快手内容包的x86_64框架,具体的拆分合并命令参考以下
cd [KSAdSDK.framework所在的目录]
mkdir ./bak
cp -r KSAdSDK.framework ./bak
lipo KSAdSDK.framework/KSAdSDK -thin armv7 -output KSAdSDK_armv7
lipo KSAdSDK.framework/KSAdSDK -thin arm64 -output KSAdSDK_arm64
lipo -create KSAdSDK_armv7 KSAdSDK_arm64 -output KSAdSDK
mv KSAdSDK KSAdSDK.framework/
ZJContentPage说明
@property (nonatomic, readonly) UIViewController *viewController;
///视频状态代理
@property (nonatomic, weak) id <ZJContentPageVideoStateDelegate> videoStateDelegate;
///页面状态代理
@property (nonatomic, weak) id <ZJContentPageStateDelegate> stateDelegate;
///内容标识
@property (nonatomic, copy, readonly) NSString *contentInfoId;
///内容类型
@property (nonatomic, assign, readonly) ZJContentInfoType contentInfoType;
///刷新
- (void)tryToRefresh;
加载视频内容
self.contentPage = [[ZJContentPage alloc]initWithPlacementId:self.contentId];
self.contentPage.videoStateDelegate = self;
self.contentPage.stateDelegate = self;
UIViewController *vc = self.contentPage.viewController;
if(vc){
CGFloat contentY = [UIApplication sharedApplication].statusBarFrame.size.height+self.navigationController.navigationBar.frame.size.height;
vc.view.frame = CGRectMake(0, contentY, self.view.frame.size.width, self.view.frame.size.height-contentY);
[self addChildViewController:vc];
[self.view addSubview:vc.view];
}else{
NSLog(@"未能创建对应广告位VC,建议从以下原因排查:\n 1,内容包需要手动导入快手模块(pod公共仓库中的SDK不支持内容包)\n 2,确保sdk已注册成功 \n 3,确保广告位正确可用");
}
TIP
加载广告具体示例详见Demo中的 : ZJContentPageStyle1ViewController ZJContentPageStyle2ViewController ZJContentPageTabBarController 其他样式: ZJFeedPageViewController //瀑布流 ZJHorizontalFeedPageVC //横版
推荐使用以下对接方式,对接视频内容,包括视频内容列表,视频内容瀑布流,视频内容横版
TIP
新对接方式支持ZJSDK
'2.5.9.8'及其以上版本,之前的版本请使用上面的对接方式对接
视频内容列表对接
视频内容列表说明
///视频状态代理
@property (nonatomic, weak) id <ZJContentPageVideoStateDelegate> videoStateDelegate;
///页面状态代理
@property (nonatomic, weak) id <ZJContentPageStateDelegate> stateDelegate;
/// 处理视频内容加载成功和失败的代理方法
@property (nonatomic, weak) id <ZJContentPageLoadCallBackDelegate> loadCallBackDelegate;
/// 刷新内容页
- (void)tryToRefresh;
/// 内容页的ViewController
- (UIViewController *)contentPageViewController
@protocol ZJContentPageVideoStateDelegate <NSObject>
@optional
/**
* 视频开始播放
* @param videoContent 内容模型
*/
- (void)zj_videoDidStartPlay:(id<ZJContentInfo>)videoContent;
/**
* 视频暂停播放
* @param videoContent 内容模型
*/
- (void)zj_videoDidPause:(id<ZJContentInfo>)videoContent;
/**
* 视频恢复播放
* @param videoContent 内容模型
*/
- (void)zj_videoDidResume:(id<ZJContentInfo>)videoContent;
/**
* 视频停止播放
* @param videoContent 内容模型
* @param finished 是否播放完成
*/
- (void)zj_videoDidEndPlay:(id<ZJContentInfo>)videoContent isFinished:(BOOL)finished;
/**
* 视频播放失败
* @param videoContent 内容模型
* @param error 失败原因
*/
- (void)zj_videoDidFailedToPlay:(id<ZJContentInfo>)videoContent withError:(NSError *)error;
@end
@protocol ZJContentPageStateDelegate <NSObject>
@optional
/**
* 内容展示
* @param content 内容模型
*/
- (void)zj_contentDidFullDisplay:(id<ZJContentInfo>)content;
/**
* 内容隐藏
* @param content 内容模型
*/
- (void)zj_contentDidEndDisplay:(id<ZJContentInfo>)content;
/**
* 内容暂停显示,ViewController disappear或者Application resign active
* @param content 内容模型
*/
- (void)zj_contentDidPause:(id<ZJContentInfo>)content;
/**
* 内容恢复显示,ViewController appear或者Application become active
* @param content 内容模型
*/
- (void)zj_contentDidResume:(id<ZJContentInfo>)content;
/// 任务完成回调
- (void)zjAdapter_contentTaskComplete:(id<ZJContentInfo>)content;
@end
/// 处理内容加载成功和失败的代理方法
@protocol ZJContentPageLoadCallBackDelegate <NSObject>
@optional
/// 内容加载成功
- (void)zj_contentPageLoadSuccess;
/// 内容加载失败
- (void)zj_contentPageLoadFailure:(NSError *)error;
@end
// 视频内容列表方法使用
// 加载广告
self.contentPageAd = [[ZJContentPageAd alloc]initWithPlacementId:adId];
self.contentPageAd.videoStateDelegate = self;
self.contentPageAd.stateDelegate = self;
self.contentPageAd.loadCallBackDelegate = self;
[self.contentPageAd loadAd];
// 展示广告
self.contentPageVC = self.contentPageAd.contentPageViewController;
[self addChildViewController:self.contentPageVC];
[self.view addSubview:self.contentPageVC.view];
[self.contentPageVC.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
视频内容瀑布流
视频内容瀑布流说明
@interface ZJFeedPageAd : ZJAd
///视频状态代理,
@property (nonatomic, weak) id <ZJContentPageVideoStateDelegate> videoStateDelegate;
///页面状态代理
@property (nonatomic, weak) id <ZJContentPageStateDelegate> stateDelegate;
/// 处理视频内容加载成功和失败的代理方法
@property (nonatomic, weak) id <ZJContentPageLoadCallBackDelegate> loadCallBackDelegate;
/// 内容页的ViewController
- (UIViewController *)feedPageViewController;
@end
@protocol ZJContentPageVideoStateDelegate <NSObject>
@optional
/**
* 视频开始播放
* @param videoContent 内容模型
*/
- (void)zj_videoDidStartPlay:(id<ZJContentInfo>)videoContent;
/**
* 视频暂停播放
* @param videoContent 内容模型
*/
- (void)zj_videoDidPause:(id<ZJContentInfo>)videoContent;
/**
* 视频恢复播放
* @param videoContent 内容模型
*/
- (void)zj_videoDidResume:(id<ZJContentInfo>)videoContent;
/**
* 视频停止播放
* @param videoContent 内容模型
* @param finished 是否播放完成
*/
- (void)zj_videoDidEndPlay:(id<ZJContentInfo>)videoContent isFinished:(BOOL)finished;
/**
* 视频播放失败
* @param videoContent 内容模型
* @param error 失败原因
*/
- (void)zj_videoDidFailedToPlay:(id<ZJContentInfo>)videoContent withError:(NSError *)error;
@end
@protocol ZJContentPageStateDelegate <NSObject>
@optional
/**
* 内容展示
* @param content 内容模型
*/
- (void)zj_contentDidFullDisplay:(id<ZJContentInfo>)content;
/**
* 内容隐藏
* @param content 内容模型
*/
- (void)zj_contentDidEndDisplay:(id<ZJContentInfo>)content;
/**
* 内容暂停显示,ViewController disappear或者Application resign active
* @param content 内容模型
*/
- (void)zj_contentDidPause:(id<ZJContentInfo>)content;
/**
* 内容恢复显示,ViewController appear或者Application become active
* @param content 内容模型
*/
- (void)zj_contentDidResume:(id<ZJContentInfo>)content;
/// 任务完成回调
- (void)zjAdapter_contentTaskComplete:(id<ZJContentInfo>)content;
@end
/// 处理内容加载成功和失败的代理方法
@protocol ZJContentPageLoadCallBackDelegate <NSObject>
@optional
/// 内容加载成功
- (void)zj_contentPageLoadSuccess;
/// 内容加载失败
- (void)zj_contentPageLoadFailure:(NSError *)error;
@end
// 视频内容瀑布流方法使用
// 加载
self.contentPage = [[ZJFeedPageAd alloc] initWithPlacementId:self.contentId];
self.contentPage.videoStateDelegate = self;
self.contentPage.stateDelegate = self;
self.contentPage.loadCallBackDelegate = self;
[self.contentPage loadAd];
// 显示
UIViewController *vc = self.contentPage.feedPageViewController;
vc.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self addChildViewController:vc];
[self.view addSubview:vc.view];
视频内容横版
视频内容横版说明
///视频状态代理
@property (nonatomic, weak) id <ZJContentPageVideoStateDelegate> videoStateDelegate;
///页面状态代理
@property (nonatomic, weak) id <ZJContentPageStateDelegate> stateDelegate;
/// 处理视频内容加载成功和失败的代理方法
@property (nonatomic, weak) id <ZJContentPageLoadCallBackDelegate> loadCallBackDelegate;
- (UIViewController *)horizontalFeedPageViewController;
@protocol ZJContentPageVideoStateDelegate <NSObject>
@optional
/**
* 视频开始播放
* @param videoContent 内容模型
*/
- (void)zj_videoDidStartPlay:(id<ZJContentInfo>)videoContent;
/**
* 视频暂停播放
* @param videoContent 内容模型
*/
- (void)zj_videoDidPause:(id<ZJContentInfo>)videoContent;
/**
* 视频恢复播放
* @param videoContent 内容模型
*/
- (void)zj_videoDidResume:(id<ZJContentInfo>)videoContent;
/**
* 视频停止播放
* @param videoContent 内容模型
* @param finished 是否播放完成
*/
- (void)zj_videoDidEndPlay:(id<ZJContentInfo>)videoContent isFinished:(BOOL)finished;
/**
* 视频播放失败
* @param videoContent 内容模型
* @param error 失败原因
*/
- (void)zj_videoDidFailedToPlay:(id<ZJContentInfo>)videoContent withError:(NSError *)error;
/// 进入横版视频详情页
/// @param viewController 详情页VC
/// @param content 视频信息
- (void)zj_horizontalFeedVideoDetailDidEnter:(UIViewController *)viewController contentInfo:(id<ZJContentInfo>)content;
/// 离开横版视频详情页
/// @param viewController 详情页VC
- (void)zj_horizontalFeedVideoDetailDidLeave:(UIViewController *)viewController;
/// 视频详情页appear
/// @param viewController 详情页VC
- (void)zj_horizontalFeedVideoDetailDidAppear:(UIViewController *)viewController;
/// 详情页disappear
/// @param viewController 详情页VC
- (void)zj_horizontalFeedVideoDetailDidDisappear:(UIViewController *)viewController;
@end
@protocol ZJContentPageStateDelegate <NSObject>
@optional
/**
* 内容展示
* @param content 内容模型
*/
- (void)zj_contentDidFullDisplay:(id<ZJContentInfo>)content;
/**
* 内容隐藏
* @param content 内容模型
*/
- (void)zj_contentDidEndDisplay:(id<ZJContentInfo>)content;
/**
* 内容暂停显示,ViewController disappear或者Application resign active
* @param content 内容模型
*/
- (void)zj_contentDidPause:(id<ZJContentInfo>)content;
/**
* 内容恢复显示,ViewController appear或者Application become active
* @param content 内容模型
*/
- (void)zj_contentDidResume:(id<ZJContentInfo>)content;
/// 任务完成回调
- (void)zjAdapter_contentTaskComplete:(id<ZJContentInfo>)content;
@end
/// 处理内容加载成功和失败的代理方法
@protocol ZJContentPageLoadCallBackDelegate <NSObject>
@optional
/// 内容加载成功
- (void)zj_contentPageLoadSuccess;
/// 内容加载失败
- (void)zj_contentPageLoadFailure:(NSError *)error;
@end
// 视频内容横版方法使用
self.contentPage = [[ZJHorizontalFeedPageAd alloc]initWithPlacementId:self.contentId];
self.contentPage.videoStateDelegate = self;
self.contentPage.stateDelegate = self;
self.contentPage.loadCallBackDelegate = self;
// 加载
[self.contentPage loadAd];
// 展示
UIViewController *vc = self.contentPage.horizontalFeedPageViewController;
vc.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self addChildViewController:vc];
[self.view addSubview:vc.view];
TIP
视频内容横版videoStateDelegate
比其他类型的代理方法多了一些方法回调