(可以设置播放器, 并且获取播放的时间)
播放广告时,可以设置一些插播放广告
// 新建随播广告
self.companionSlot =
[[IMACompanionAdSlot alloc] initWithView:self.companionView
width:self.companionView.frame.size.width
height:self.companionView.frame.size.height];
// 在新建容器IMAAdDisplayContainer时加入随播广告
self.container = [[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView
companionSlots:@[ self.companionSlot ]];
这里主要讲手动控制广告播放和暂停的功能。
在默认实现中,SDK将在其预定时间自动播放。开发人员要控制播放功能,阻止SDK自动播放,你需要在IMAAdsManagerDelegate ->
(adsManager:didReceiveAdEvent:)方法中监听 AD_BREAK _READY 事件中处理手动播放
- (void)setUpAdsLoader {
...
IMASettings settings = [[IMASettings alloc] init];
// 设置手动控制广告播放和中断的功能
settings.autoPlayAdBreaks = NO;
self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:settings];
...
}
- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {
...
switch (event.type) {
// 监听AD_BREAK_READY事件
case kIMAAdEvent_AD_BREAK_READY:
// 开始播放广告
[adsManager start];
break;
...
}
}
浏览器打开的位置: 用户点击广告并进入该广告的目标网页的过程。SDK默认使用Safari打开,这里介绍如何配置APP内部打开目标网站,以及如何监听与访问该页面的用户相关的事件。
IMAAdsRenderingSettings设置内部浏览器
- (void)createAdsRenderingSettings {
self.adsRenderingSettings = [[IMAAdsRenderingSettings alloc] init];
self.adsRenderingSettings.webOpenerDelegate = self;
self.adsRenderingSettings.webOpenerPresentingController = self;
}
配置IMAAdsRenderingSettings实例后,可以将其传递给IMAAdsManager初始化方法:
[self.adsManager initializeWithAdsRenderingSettings: adsRenderingSettings];
IMA SDK提供IMAWebOpenerDelegate,以便在用户即将查看或刚刚关闭点击页面时进行通信。
// 外部浏览器将打开
- (void)webOpenerWillOpenExternalBrowser:(NSObject *)webOpener { }
// 应用内浏览器将打开
- (void)webOpenerWillOpenInAppBrowser:(NSObject *)webOpener { }
// 应用内浏览器已经打开了
- (void)webOpenerDidOpenInAppBrowser:(NSObject *)webOpener { }
// 应用内浏览器将关闭
- (void)webOpenerWillCloseInAppBrowser:(NSObject *)webOpener { }
// 应用内浏览器已经关闭
- (void)webOpenerDidCloseInAppBrowser:(NSObject *)webOpener { }
画中画就是悬浮窗视频效果
1、PIP模式是基于AVPlayerLayer的,画面在‘原视图’和‘悬浮窗’之间切换,实质是‘原视图’的layer取出,缩小,放到悬浮窗的layer上;
2、‘悬浮窗’在新的iOS9 SDK中,有一个NB的名字:AVPictureInPictureController,目前它是不支持自定义操作的,统一有三个按钮,‘还原’,‘暂停’,‘关闭’;
3、PIP什么时候用呢?就我而言,两个地方:
(1)home键回到后台时,视频用‘悬浮窗’播放
(2)点击视频播放器上某一个PIP按钮,视频切换为‘悬浮窗’播放;
4、PIP适用于什么环境呢?
(1)iOS9以上
(2)AVKit、AVFoundation、WebKit类服务视频播放
(3)被弃用的 MPMoviePlayerViewController 或 MPMoviePlayerController抱歉,建议换播放框架吧
设置AVAudioSession属性以支持后台播放,并在以下位置启用后台播放IMASettings:
- (void)viewDidLoad {
[super viewDidLoad];
self.playButton.layer.zPosition = MAXFLOAT;
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategoryPlayback
error:nil];
[self setupAdsLoader];
[self setUpContentPlayer];
}
- (void)setupAdsLoader {
IMASettings *settings = [[IMASettings alloc] init];
settings.enableBackgroundPlayback = YES;
self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:settings];
self.adsLoader.delegate = self;
}
为了支持PictureinPicture,Apple添加了AVPictureInPictureController 和 AVPictureinPictureControllerDelegate类。就其本身而言,IMA补充道 IMAPictureInPictureProxy。要在项目中包含这些类,将以下语句添加到代码中:
...
@interface VideoViewController ()
...
// PiP objects.
@property(nonatomic, strong) IMAPictureInPictureProxy *pictureInPictureProxy;
@property(nonatomic, strong) AVPictureInPictureController *pictureInPictureController;
...
@end
- (void)setUpContentPlayer {
...
self.pictureInPictureProxy =
[[IMAPictureInPictureProxy alloc] initWithAVPictureInPictureControllerDelegate:self];
self.pictureInPictureController =
[[AVPictureInPictureController alloc] initWithPlayerLayer:self.contentPlayerLayer];
self.pictureInPictureController.delegate = self.pictureInPictureProxy;
}
还有一个新对象要创建:IMAAVPlayerVideoDisplay。这将传递给您的IMAAdsRequest构造函数,并允许SDK在图片模式下播放视频时将广告插入PiP窗口:
- (void)requestAdsWithTag:(NSString *)adTagUrl {
[self logMessage:@"Requesting ads"];
// Create an ad request with our ad tag, display container, and optional user context.
IMAAdsRequest *request = [[IMAAdsRequest alloc]
initWithAdTagUrl:adTagUrl
adDisplayContainer:[self createAdDisplayContainer]
avPlayerVideoDisplay:[[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.contentPlayer]
pictureInPictureProxy:self.pictureInPictureProxy
userContext:nil];
[self.adsLoader requestAdsWithRequest:request];
}
在画中画模式下无法启动 IMA SDK广告。因此,您需要确保仅[adsManager start] 在视频处于标准播放模式时进行呼叫:
...
- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {
[self logMessage:@"AdsManager event (%s).", AdEventNames[event.type]];
// When the SDK notified us that ads have been loaded, play them.
switch (event.type) {
case kIMAAdEvent_LOADED:
if (![self.pictureInPictureController isPictureInPictureActive]) {
[adsManager start];
}
break;
...
default:
break;
}
}
如果你使用的是AVPlayer没有AVPlayerViewController,你需要添加自己的画中画按钮。我们在高级示例中实现了一个 如下:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
广告后台管理平台
网址: https://admanager.google.com
想向您的广告联盟添加新尺寸?
新建一个广告单元并添加新尺寸,或者将新尺寸添加到分配给现有广告单元的尺寸列表中。只要在至少 1 个广告单元或订单项中定义了一个尺寸,就可以在广告联盟中的别处使用该尺寸。
如果选择此选项,着陆页将会在广告资源部分的“广告联盟设置”中设置的默认目标窗口中打开。如果广告单元位于移动应用中,则系统会忽略目标窗口。对于 Android 和 iOS 应用,广告会在未命名的新浏览器窗口中加载。