iOS視頻廣告(二) GoogleAds-IMA-iOS-SDK
(GoogleAds-IMA-iOS-SDK 二次封裝)
開(kāi)發(fā)
- 開(kāi)發(fā)環(huán)境: Xcode 7
- 運(yùn)行條件: iOS(9.0+)
- 管理平臺(tái): admanger帳號(hào)。 https://admanager.google.com
- 官網(wǎng)文檔地址:
https://developers.google.com/interactive-media-ads/docs/sdks/ios/
?
注意:
- 管理平臺(tái),官網(wǎng)文檔都需要vpn才能瀏覽.
- GoogleAds-IMA-iOS-SDK只提供了視頻廣告功能, 如果要實(shí)現(xiàn)橫幅廣告/插頁(yè)式廣告/原生廣告/激勵(lì)廣告可以使用Google-Mobile-Ads-SDK, 后邊的文章會(huì)介紹
- 開(kāi)源框架:github地址
- 谷歌視頻廣告SDK介紹: iOS視頻廣告(一) GoogleAds-IMA-iOS-SDK
?
(如果使用有什么問(wèn)題久脯,可以給我留言沛硅,歡迎一起學(xué)習(xí)规肴,歡迎github-star, 點(diǎn)贊)
為什么要封裝SDK:
- 雖說(shuō)可以直接使用谷歌的SDK寫進(jìn)項(xiàng)目中, 但是實(shí)現(xiàn)起來(lái)還是小復(fù)雜, 需要踩的坑還是有點(diǎn)多. (比如調(diào)用順序變換可能會(huì)導(dǎo)致廣告播不出來(lái))
- 提供給開(kāi)發(fā)者加載廣告接口不止一個(gè)橄杨,沒(méi)接觸過(guò)谷歌SDK, 挨個(gè)看,測(cè)試?yán)速M(fèi)精力蛛勉。
- 使用起來(lái)代碼看起來(lái)會(huì)有些亂, 耦合性高, 不方便后期的維護(hù), 而且需要處理的代理回調(diào)方法稍微有些小麻煩儡司。
?
不多說(shuō)廢話, 直接給大家講講 JXVideoAds 如何使用, 幫助大家快速用起來(lái)。
JXVideoAds介紹
?
JXVideoAds是一個(gè)對(duì)谷歌視頻廣告SDK進(jìn)行二次封裝的框架, JXVideoAds主要提供了兩個(gè)類控制廣告的生命周期渐尿,任選一個(gè)使用即可:
(1)、 JXAVideoOperator - 基于NSObjct矾瑰, 用于加載廣告砖茸,類似于manager。
- 必須傳入一個(gè)(UIView)container - 作為廣告播放的容器視圖殴穴。
- 必須傳入(StateBlock)state - 廣告加載和調(diào)用狀態(tài)的回調(diào)凉夯。
- 必須傳入(NSString)tagUrl - 廣告Url货葬。
- 可選:(ProgressBlock)progress - 加載進(jìn)度回調(diào)。
- 可選:(AVPlayer)player - 播放器劲够, JXVideoOperator可以根據(jù)傳入的player返回給你廣告播放進(jìn)度震桶。
- 可選:userContext:- 廣告加載器標(biāo)識(shí)。
- 可選:(ParamsBlock)params - 自定義參數(shù)構(gòu)建Block征绎。
?
(2)蹲姐、JXAVideoView - 基于UIView,作為廣告播放的容器視圖人柿,也是廣告的管理者柴墩。(推薦使用這個(gè)類,使用起來(lái)更簡(jiǎn)易凫岖,內(nèi)部自己封裝好了AVPlayer江咳,無(wú)需傳入)
- 必須傳入(StateBlock)state - 廣告加載和調(diào)用狀態(tài)的回調(diào)。
- 必須傳入(NSString)tagUrl - 廣告Url哥放。
- 可選:(ProgressBlock)progress - 加載進(jìn)度回調(diào)歼指。
- 可選:userContext:- 廣告加載器標(biāo)識(shí)。
- 可選:(ParamsBlock)params - 自定義參數(shù)構(gòu)建Block甥雕。
?
(另外JXAVideoParamsBuilder - 一個(gè)參數(shù)構(gòu)建者踩身,內(nèi)部封裝了一些常用的個(gè)性化參數(shù),點(diǎn)語(yǔ)法依次自定義參數(shù)犀农,開(kāi)發(fā)者可以挑選使用惰赋。)
Installation [安裝]
安裝,只需將以下面代碼添加到您的Podfile:
platform :ios, '9.0'
target 'TargetName' do
pod 'JXVideoAds'
end
注意 !!! :
* OC - 終端安裝命令正常輸入: pod install
* Swift - 終端安裝命令: IS_FRAMEWORK=1 pod install
因?yàn)镾wift必須使用framework(use_frameworks!), 所以安裝不了objc源碼,只能打包安裝.
Frame set [框架集合]
- API 外部應(yīng)該訪問(wèn)的接口
- Common SDK內(nèi)部公共類
- GoogleIma 谷歌廣告API
The UI effect:
?
-
Breakpoint Play
breakpoint_play.gif
?
-
Fullscreen
fullscreen.gif
SDK例子:
?
[JXAVideoView 使用] :
?
Example 1
?
// import
#import "JXAVideoView.h"
// 加載廣告
- (IBAction)params:(id)sender {
[self.containerView params:^JXAVideoParamsBuilder *(JXAVideoParamsBuilder *paramsBuilder) {
return paramsBuilder
.autoPlayAdBreaks(YES)
.adTagUrl(tag);
} state:^(JXAVideoAdsState state, JXAVideoAds *video) {
switch (state) {
case JXAVideoAdsState_Loaded:
NSLog(@"已經(jīng)加載完畢 - JXAVideoAdsState_Loaded");
// [video play];
break;
case JXAVideoAdsState_Started:
NSLog(@"已經(jīng)開(kāi)始播放廣告 - JXAVideoAdsState_Started");
break;
case JXAVideoAdsState_Error:
NSLog(@"加載錯(cuò)誤 - JXAVideoAdsState_Error");
break;
case JXAVideoAdsState_Pause:
NSLog(@"廣告暫停 - JXAVideoAdsState_Pause");
break;
case JXAVideoAdsState_Ended:
NSLog(@"廣告播放結(jié)束 - JXAVideoAdsState_Ended");
break;
case JXAVideoAdsState_Skipped:
NSLog(@"廣告已經(jīng)跳過(guò) - JXAVideoAdsState_Skipped");
break;
default:
break;
}
}];
}
// 不使用時(shí)呵哨,最好銷毀赁濒。
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[self.containerView remove];
}
Example 2
?
// import
#import "JXAVideoView.h"
- (IBAction)paramsP:(id)sender {
[self.containerView params:^JXAVideoParamsBuilder *(JXAVideoParamsBuilder *paramsBuilder) {
return paramsBuilder
.autoPlayAdBreaks(YES)
.language(@"en")
.enableBackgroundPlayback(YES)
.volume(@1)
.adTagUrl(tagOne)
.userContext(nil)
.player(nil)
.mimeTypes(@[ @"video/mp4", @"application/x-mpegURL"])
.bitrate(1024)
.webOpenerPresentingController([JXViewController new])
.webOpenerDelegate(self);
} state:^(JXAVideoAdsState state, JXAVideoAds *video) {
switch (state) {
case JXAVideoAdsState_Loaded:
NSLog(@"已經(jīng)加載完畢 - JXAVideoAdsState_Loaded");
[video play];
break;
case JXAVideoAdsState_Started:
NSLog(@"已經(jīng)開(kāi)始播放廣告 - JXAVideoAdsState_Started");
break;
case JXAVideoAdsState_Error:
NSLog(@"加載錯(cuò)誤 - JXAVideoAdsState_Error");
break;
case JXAVideoAdsState_Pause:
NSLog(@"廣告暫停 - JXAVideoAdsState_Pause");
break;
case JXAVideoAdsState_Ended:
NSLog(@"廣告播放結(jié)束 - JXAVideoAdsState_Ended");
break;
case JXAVideoAdsState_Skipped:
NSLog(@"廣告已經(jīng)跳過(guò) - JXAVideoAdsState_Skipped");
break;
default:
break;
}
} progress:^(CGFloat current, CGFloat duration) {
NSLog(@"currentTime -- %f \n duration -- %f", current, duration);
}];
}
// 不使用時(shí),最好銷毀孟害。
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[self.containerView remove];
}
Example 3 and so on ...
?
[XAVideoOperator 使用] :
?
Example 1
#import "JXAVideoOperator.h"
- (IBAction)mNormal:(id)sender {
self.operator = [[JXAVideoOperator alloc]
initWithTagUrl:tagOne
containerView:self.containerView
userContext:nil
state:^(JXAVideoAdsState state,
JXAVideoAds *video) {
switch (state) {
case JXAVideoAdsState_Loaded:
NSLog(@"廣告加載完畢 - JXAVideoAdsState_Loaded");
[video play];
break;
case JXAVideoAdsState_Started:
NSLog(@"已經(jīng)開(kāi)始播放廣告 - JXAVideoAdsState_Started");
break;
case JXAVideoAdsState_Error:
NSLog(@"加載錯(cuò)誤 - JXAVideoAdsState_Error");
break;
case JXAVideoAdsState_Pause:
NSLog(@"廣告暫停 - JXAVideoAdsState_Pause");
break;
case JXAVideoAdsState_Ended:
NSLog(@"廣告播放結(jié)束 - JXAVideoAdsState_Ended");
break;
case JXAVideoAdsState_Skipped:
NSLog(@"廣告已經(jīng)跳過(guò) - JXAVideoAdsState_Skipped");
break;
default:
break;
}
}];
}
...
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[self.operator remove];
}
Example 2 and so on ...
#import "JXAVideoOperator.h"
...