寫(xiě)在前面
什么是VungleSDK 侯养?VungleSDK一個(gè)廣告平臺(tái)的SDK。
0敞葛、相關(guān)鏈接
VungleSDK管理平臺(tái)
VungleSDK相關(guān)文檔
1狮惜、工作原理
init SDK -->loading -->play --> remove cache --> loading
簡(jiǎn)而言之,就是初始化-->加載緩存廣告視頻-->播放-->清除對(duì)應(yīng)播放的緩存視頻-->加載緩存新的廣告視頻
如果網(wǎng)速足夠快的話摘悴,在看完一個(gè)廣告之前峭梳,就已經(jīng)成功緩存好新的廣告,下次播放即可實(shí)現(xiàn)0秒等待
2烦租、開(kāi)始接入
步驟1:添加 Vungle 框架到您的 Xcode 項(xiàng)目
添加 VungleSDK.framework 到您的項(xiàng)目
分為Cocoapods接入和手動(dòng)接入延赌,參考文檔即可正常接入除盏。
這里要說(shuō)一下關(guān)于手動(dòng)添加,鏈接一些其他的本地框架挫以,其實(shí)*.framework的者蠕,新版本的Xcode,都可以不用手動(dòng)添加了掐松,可以參考我的另一篇文章
添加“ObjC”鏈接器標(biāo)記踱侣,如圖:
步驟2:刪除 iOS 狀態(tài)欄
作用應(yīng)該在于廣告的全屏正常顯示,在項(xiàng)目的info文件中添加大磺,右鍵點(diǎn)擊該文件-->Open as --> Source code
<key>UIStatusBarTintParameters</key>
<dict>
<key>UINavigationBar</key>
<dict>
<key>Style</key>
<string>UIBarStyleDefault</string>
<key>Translucent</key>
<false/>
</dict>
</dict>
步驟3:添加代碼
注意:調(diào)用初始化的方法抡句,就開(kāi)始緩存廣告了,有可能初始化還沒(méi)成功杠愧,就成功緩存待榔,這種情況下,需要先對(duì)這個(gè)屬性initialized進(jìn)行判斷流济,否則直接調(diào)用play會(huì)不成功
初始化SDK
- (BOOL)startWithAppId:(nonnull NSString *)appID placements:(nonnull NSArray *)placements error:(NSError **)error;
一旦初始化成功锐锣,以下回調(diào)會(huì)被調(diào)用:
- (void)vungleSDKDidInitialize;
一旦初始化失敗,以下回調(diào)會(huì)被調(diào)用:
-(void)vungleSDKFailedToInitializeWithError:(NSError *)error;
注意:
- appID需要在管理后臺(tái)中創(chuàng)建應(yīng)用獲取绳瘟,placements這是默認(rèn)廣告位雕憔,可以有多個(gè),具體需要在管理后臺(tái)進(jìn)行配置糖声,拿到placementID放入該數(shù)組斤彼。
- 調(diào)用這個(gè)函數(shù),如果appID 和 placements兩個(gè)參數(shù)都為nil蘸泻,會(huì)返回FALSE世曾。如果其中一個(gè)參數(shù)是nil扬虚,或者錯(cuò)誤毕匀,則回調(diào)vungleSDKFailedToInitializeWithError涡尘。
- 一個(gè)placementID代表一個(gè)廣告位,一個(gè)廣告位的廣告歼争,每次打開(kāi)都是不同的拜马,因?yàn)榇蜷_(kāi)后會(huì)清除緩存,重新緩存新的廣告沐绒。
為廣告位置加載廣告
- (BOOL)loadPlacementWithID:(NSString *)placementID error:(NSError **)error;
注意:
- loadPlacementWithID返回YES俩莽,不代表緩存成功,只能代表加載成功乔遮,緩存還是需要一定的時(shí)間的扮超。
一旦緩存成功,會(huì)回調(diào)這個(gè)方法:
- (void)vungleAdPlayabilityUpdate:(BOOL)isAdPlayable placementID:(nullable NSString *)placementID;
注意
- 初始化SDK的時(shí)候,默認(rèn)是有一個(gè)廣告位(placementID)為自動(dòng)緩存出刷,具體可以在管理后臺(tái)進(jìn)行設(shè)置你想要的廣告位為默認(rèn)緩存璧疗,也就是說(shuō),調(diào)用SDK初始化的方法馁龟,還沒(méi)回調(diào)成功崩侠,有可能該廣告位已經(jīng)緩存廣告成功了。實(shí)測(cè)是這樣的坷檩。
可以通過(guò)調(diào)用以下方法却音,來(lái)判斷該廣告位的廣告是否具備可播放的性質(zhì),一旦返回YES,即說(shuō)明該廣告可播放矢炼,進(jìn)而調(diào)用play的函數(shù):
- (BOOL)isAdCachedForPlacementID:(nonnull NSString *)placementID;
播放廣告
一旦確定廣告位置的廣告已準(zhǔn)備好系瓢,可使用以下方法來(lái)播放廣告:
- (BOOL)playAd:(UIViewController *)controller options:(nullable NSDictionary *)options placementID:(nullable NSString *)placementID error:( NSError *__autoreleasing _Nullable *_Nullable)error;
開(kāi)始播放 和 結(jié)束播放,都有對(duì)應(yīng)的回調(diào)句灌,如下:
- (void)vungleWillShowAdForPlacementID:(nullable NSString *)placementID;
- (void)vungleWillCloseAdWithViewInfo:(VungleViewInfo *)info placementID:(NSString *)placementID;
Flex Feed 廣告
非全屏廣告夷陋,具體請(qǐng)參考文檔。
我的接入
我的接入思路涯塔,以及遇到的問(wèn)題
1肌稻、因?yàn)槲易龅氖荢DK,現(xiàn)在在我的SDK項(xiàng)目中匕荸,接入VungleSDK,等于說(shuō)枷邪,我暴露出去的榛搔,分為兩個(gè)函數(shù),接入我的SDK东揣,需要開(kāi)APP啟動(dòng)的時(shí)候先調(diào)用第一個(gè)函數(shù)践惑,然后具體在播放的時(shí)機(jī),再調(diào)用第二個(gè)函數(shù)嘶卧。如下:
//初始化并開(kāi)始緩存
-(void)startCacheAdvertisingSuccess:(EventBlock)initSuccessBlock
failure:(EventBlock)initFailureBlock;
//開(kāi)始播放
-(void)showAdvertisingWithCloseTipsTitle:(NSString*)closeTipsTitle
closeTipsContent:(NSString*)closeTipsContent
startPlay:(EventBlock)startPlayBlock
endPlay:(EventBlock)endPlayBlock
playFailure:(FailureBlock)playFailureBlock;
2尔觉、由于SDK緩存全看網(wǎng)速,在必要的時(shí)候芥吟,需要我手動(dòng)遍歷侦铜,未cache的則調(diào)用loading,并做一些等待提示钟鸵,緩存成功钉稍,需要直接播放。如果是自動(dòng)緩存棺耍,則只有開(kāi)發(fā)者調(diào)用時(shí)才播放贡未。
-(void)loadAllPlacement{
WEAKSELF;
[self.placementIDsArray enumerateObjectsUsingBlock:^(NSString *placementID, NSUInteger idx, BOOL * _Nonnull stop) {
//已經(jīng)緩存的,不再緩存
if (![self.sdk isAdCachedForPlacementID:placementID]) {
NSError *error = nil;
[weakSelf.sdk loadPlacementWithID:placementID error:&error];
}
}];
}
//獲取已緩存的廣告位
-(NSArray*)alreadyCachedPlacement:(NSArray*)allArr{
__block NSMutableArray *arr = [NSMutableArray array];
[allArr enumerateObjectsUsingBlock:^(NSString *placementID, NSUInteger idx, BOOL * _Nonnull stop) {
if ([self.sdk isAdCachedForPlacementID:placementID]) {
[arr addObject:placementID];
}
}];
return arr;
}
遇到的問(wèn)題
在管理后臺(tái)新增一個(gè)應(yīng)用后,添加一個(gè)廣告位俊卤,只有一個(gè)廣告的時(shí)候嫩挤,該廣告位為自動(dòng)緩存的廣告位。
寫(xiě)好自己的demo之后消恍,使用了VungleSDK官方的文檔中提供的appID 和 placements俐镐,發(fā)現(xiàn)我的demo能夠正常播放廣告,可是使用了自己管理后臺(tái)的哺哼,就不能正常播放廣告佩抹,要么沒(méi)播放完就停止播放并且黑屏,要么點(diǎn)擊廣告關(guān)閉按鈕后黑屏取董。由此我猜想是:該廣告位對(duì)應(yīng)的測(cè)試狀態(tài)下的廣告有問(wèn)題棍苹,不能正常緩存。
解決問(wèn)題
于是茵汰,找了他們官方的文檔半天(大概是這個(gè)位置)枢里,才找到一個(gè)支持郵箱(monetize@vungle.com),于是有了以下對(duì)話:
我發(fā)郵件尋求幫助:
技術(shù)支持的回復(fù):(注意:這里說(shuō)是一般需要30分鐘才生效u逦纭)
我的建議:
技術(shù)支持的回復(fù):
小結(jié)
有趣栏豺,VungleSDK很少人用?反正基本找不到相關(guān)的接入教程豆胸,相關(guān)官方文檔也沒(méi)有人評(píng)論奥洼,而官方文檔又沒(méi)有提示這個(gè)測(cè)試廣告有問(wèn)題的幺蛾子!還好官方的工作人員郵件倒是回復(fù)的很快晚胡,因此結(jié)合文檔灵奖,堅(jiān)定自己的判斷,就解決問(wèn)題了估盘。