123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- //
- // RQDspVideoDetailViewModel.m
- // JSJP
- //
- // Created by RONGQING on 2022/1/19.
- //
- #import "RQDspVideoDetailViewModel.h"
- #import <ADSuyiSDK/ADSuyiSDKDrawvodAd.h>
- #import <ADSuyiSDK/ADSuyiAdapterDrawvodAdView.h>
- @interface RQDspVideoDetailViewModel () <ADSuyiSDKDrawvodAdDelegate>
- @property (nonatomic, readwrite, strong) NSArray *videosItemArr;
- @property (nonatomic, readwrite, strong) NSIndexPath *indexPath;
- @property (nonatomic, readwrite, strong) ADSuyiSDKDrawvodAd *drawvodAd;
- @property (nonatomic, strong) NSMutableArray<ADSuyiAdapterDrawvodAdView *> *data;
- @property (nonatomic, readwrite, strong) VideosItem *lastVideoItem;
- @end
- @implementation RQDspVideoDetailViewModel
- #pragma mark - Public Method
- - (instancetype)initWithServices:(id<RQViewModelServices>)services params:(NSDictionary *)params {
- if (self = [super initWithServices:services params:params]) {
- self.videosItemArr = RQ_COMMON_MANAGER.dspListArr;
- self.indexPath = params[RQViewCommonValueKey];
- }
- return self;
- }
- - (void)dealloc {
- for (ADSuyiAdapterDrawvodAdView *adview in self.data) {
- // 5、广告内存回收
- [adview unRegist];
- }
- }
- - (void)initialize {
- [super initialize];
- /// 允许下拉刷新
- self.shouldPullDownToRefresh = YES;
- /// 允许上拉加载
- self.shouldPullUpToLoadMore = YES;
- self.prefersNavigationBarHidden = YES;
- self.perPage = 10;
-
- @weakify(self);
- /// 消息列表
- RAC(self, videosItemArr) = self.requestRemoteDataCommand.executionSignals.switchToLatest;
- /// 数据源
- RAC(self, dataSource) = [RACObserve(self, videosItemArr) map:^(NSArray * videosItemArr) {
- @strongify(self)
- return [self dataSourceWithVideosItems:videosItemArr];
- }];
- }
- #pragma mark - PrivateMethod
- // 请求数据
- - (RACSignal *)requestRemoteDataSignalWithPage:(NSUInteger)page {
- @weakify(self)
- NSArray * (^videosItemsBlock)(NSArray *) = ^(NSArray *products) {
- @strongify(self)
- [MBProgressHUD rq_hideHUD];
- if (page == 1) {
- /// 下拉刷新
- } else {
- /// 上拉加载
- products = @[(self.videosItemArr ?: @[]).rac_sequence, products.rac_sequence].rac_sequence.flatten.array;
- }
- return products;
- };
- return [[[self.services.client getDspListWithPageNum:page pageSize:self.perPage] map:videosItemsBlock] doError:^(NSError * _Nonnull error) {
- [MBProgressHUD rq_showErrorTips:error];
- }];
- }
- #pragma mark - 辅助方法
- - (NSArray *)dataSourceWithVideosItems:(NSArray *)videosItemArr {
- if (RQObjectIsNil(videosItemArr) || videosItemArr.count == 0) return nil;
- NSArray *viewModels = [videosItemArr.rac_sequence map:^(VideosItem *videosItem) {
- RQCommonGroupViewModel *group = [RQCommonGroupViewModel groupViewModel];
- videosItem.index = [videosItemArr indexOfObject:videosItem] + 1;
- videosItem.totalNum = videosItemArr.count;
- RQDspVideoDetailItemViewModel *dspVideoDetailItemViewModel = [[RQDspVideoDetailItemViewModel alloc] initWithVideosItem:videosItem];
- dspVideoDetailItemViewModel.rowHeight = RQ_SCREEN_HEIGHT;
- dspVideoDetailItemViewModel.operation = ^{
- };
- group.itemViewModels = @[dspVideoDetailItemViewModel];
- return group;
- }].array;
- [self loadDrawvodAd];
- return viewModels ?: @[] ;
- }
- - (void)loadDrawvodAd {
- // 2、加载沉浸式视频广告
- [self.drawvodAd load:4];
- }
- #pragma mark - ADSuyiSDKDrawvodAdDelegate
- - (void)adsy_drawvodAdSuccessToLoad:(ADSuyiSDKDrawvodAd *)drawvodAd drawvodAdArray:(NSArray<ADSuyiAdapterDrawvodAdView *> *)drawvodAdViewArray {
- for (ADSuyiAdapterDrawvodAdView *adView in drawvodAdViewArray) {
- // 3、渲染沉浸式广告
- [adView render];
- }
- }
- - (void)adsy_drawvodAdFailToLoad:(ADSuyiSDKDrawvodAd *)drawvodAd errorModel:(ADSuyiAdapterErrorDefine *)errorModel {
-
- }
- - (void)adsy_drawvodAdSuccessToRender:(ADSuyiSDKDrawvodAd *)drawvodAd view:(ADSuyiAdapterDrawvodAdView *)drawvodAdView {
- // 4、渲染成功,此时高度正常,资源加载中,可'展示
- NSMutableArray *dataSourceArr = [NSMutableArray arrayWithArray:self.dataSource];
- [self.data addObject:drawvodAdView];
- NSInteger i = 8;
- if (self.lastVideoItem) {
- if (self.lastVideoItem.index < dataSourceArr.count) {
- i = self.lastVideoItem.index + arc4random() % (dataSourceArr.count - self.lastVideoItem.index) + 4;
- } else {
- return;
- }
- } else {
- i = (dataSourceArr.count > 6)? 6 + arc4random() % (dataSourceArr.count - 6) : 0;
- }
-
- if (i > dataSourceArr.count) {
- return;
- }
- // VideosItem *videoItem = dataSourceArr[i];
- // videoItem.index = i;
- // videoItem.totalNum = dataSourceArr.count + 1;
- RQCommonGroupViewModel *group = dataSourceArr[i];
- RQDspVideoDetailItemViewModel *dspVideoDetailItemViewModel = group.itemViewModels.firstObject;
- dspVideoDetailItemViewModel.videosItem.adView = drawvodAdView;
- dspVideoDetailItemViewModel.rowHeight = RQ_SCREEN_HEIGHT;
- dspVideoDetailItemViewModel.operation = ^{
- };
- group.itemViewModels = @[dspVideoDetailItemViewModel];
-
- [dataSourceArr replaceObjectAtIndex:i withObject:group];
- self.dataSource = dataSourceArr.copy;
- self.lastVideoItem = dspVideoDetailItemViewModel.videosItem;
- }
- - (void)adsy_drawvodAdFailToRender:(ADSuyiSDKDrawvodAd *)drawvodAd view:(ADSuyiAdapterDrawvodAdView *)drawvodAdView error:(nullable NSError *)error {
-
- }
- - (void)adsy_drawvodAdPlayerDidPlayFinish:(ADSuyiAdapterDrawvodAdView *)drawvodAdView {
-
- }
- - (void)adsy_drawvodAdDidExposure:(ADSuyiAdapterDrawvodAdView *)drawvodAdView {
-
- }
- - (void)adsy_drawvodAdDidClick:(ADSuyiAdapterDrawvodAdView *)drawvodAdView {
-
- }
- #pragma mark - LazyLoad
- - (ADSuyiSDKDrawvodAd *)drawvodAd {
- if(!_drawvodAd) {
- // 1、初始化沉浸式视频广告,流程和信息流广告类似
- _drawvodAd = [[ADSuyiSDKDrawvodAd alloc] initWithSize:RQControllerHelper.currentViewController.view.frame.size];
- _drawvodAd.posId = @"0121212a7b45ec720e";
- _drawvodAd.controller = RQControllerHelper.currentViewController;
- _drawvodAd.delegate = self;
- }
- return _drawvodAd;
- }
- - (NSMutableArray<ADSuyiAdapterDrawvodAdView *> *)data {
- if(!_data) {
- _data = [NSMutableArray new];
- }
- return _data;
- }
- @end
|