寫在前面
什么是VungleSDK ?VungleSDK一個廣告平臺的SDK。
0、相關(guān)鏈接
VungleSDK管理平臺
VungleSDK相關(guān)文檔
1、工作原理
init SDK -->loading -->play --> remove cache --> loading
簡而言之,就是初始化-->加載緩存廣告視頻-->播放-->清除對應(yīng)播放的緩存視頻-->加載緩存新的廣告視頻
如果網(wǎng)速足夠快的話,在看完一個廣告之前,就已經(jīng)成功緩存好新的廣告,下次播放即可實現(xiàn)0秒等待
2、開始接入
步驟1:添加 Vungle 框架到您的 Xcode 項目
添加 VungleSDK.framework 到您的項目
分為Cocoapods接入和手動接入,參考文檔即可正常接入。
這里要說一下關(guān)于手動添加,鏈接一些其他的本地框架,其實*.framework的,新版本的Xcode,都可以不用手動添加了,可以參考我的另一篇文章
添加“ObjC”鏈接器標(biāo)記,如圖:

步驟2:刪除 iOS 狀態(tài)欄
作用應(yīng)該在于廣告的全屏正常顯示,在項目的info文件中添加,右鍵點擊該文件-->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)用初始化的方法,就開始緩存廣告了,有可能初始化還沒成功,就成功緩存,這種情況下,需要先對這個屬性initialized進(jìn)行判斷,否則直接調(diào)用play會不成功
初始化SDK
- (BOOL)startWithAppId:(nonnull NSString *)appID placements:(nonnull NSArray *)placements error:(NSError **)error;
一旦初始化成功,以下回調(diào)會被調(diào)用:
- (void)vungleSDKDidInitialize;
一旦初始化失敗,以下回調(diào)會被調(diào)用:
-(void)vungleSDKFailedToInitializeWithError:(NSError *)error;
注意:
- appID需要在管理后臺中創(chuàng)建應(yīng)用獲取,placements這是默認(rèn)廣告位,可以有多個,具體需要在管理后臺進(jìn)行配置,拿到placementID放入該數(shù)組。
- 調(diào)用這個函數(shù),如果appID 和 placements兩個參數(shù)都為nil,會返回FALSE。如果其中一個參數(shù)是nil,或者錯誤,則回調(diào)vungleSDKFailedToInitializeWithError。
- 一個placementID代表一個廣告位,一個廣告位的廣告,每次打開都是不同的,因為打開后會清除緩存,重新緩存新的廣告。
為廣告位置加載廣告
- (BOOL)loadPlacementWithID:(NSString *)placementID error:(NSError **)error;
注意:
- loadPlacementWithID返回YES,不代表緩存成功,只能代表加載成功,緩存還是需要一定的時間的。
一旦緩存成功,會回調(diào)這個方法:
- (void)vungleAdPlayabilityUpdate:(BOOL)isAdPlayable placementID:(nullable NSString *)placementID;
注意
- 初始化SDK的時候,默認(rèn)是有一個廣告位(placementID)為自動緩存,具體可以在管理后臺進(jìn)行設(shè)置你想要的廣告位為默認(rèn)緩存,也就是說,調(diào)用SDK初始化的方法,還沒回調(diào)成功,有可能該廣告位已經(jīng)緩存廣告成功了。實測是這樣的。
可以通過調(diào)用以下方法,來判斷該廣告位的廣告是否具備可播放的性質(zhì),一旦返回YES,即說明該廣告可播放,進(jìn)而調(diào)用play的函數(shù):
- (BOOL)isAdCachedForPlacementID:(nonnull NSString *)placementID;
播放廣告
一旦確定廣告位置的廣告已準(zhǔn)備好,可使用以下方法來播放廣告:
- (BOOL)playAd:(UIViewController *)controller options:(nullable NSDictionary *)options placementID:(nullable NSString *)placementID error:( NSError *__autoreleasing _Nullable *_Nullable)error;
開始播放 和 結(jié)束播放,都有對應(yīng)的回調(diào),如下:
- (void)vungleWillShowAdForPlacementID:(nullable NSString *)placementID;
- (void)vungleWillCloseAdWithViewInfo:(VungleViewInfo *)info placementID:(NSString *)placementID;
Flex Feed 廣告
非全屏廣告,具體請參考文檔。
我的接入
我的接入思路,以及遇到的問題
1、因為我做的是SDK,現(xiàn)在在我的SDK項目中,接入VungleSDK,等于說,我暴露出去的,分為兩個函數(shù),接入我的SDK,需要開APP啟動的時候先調(diào)用第一個函數(shù),然后具體在播放的時機(jī),再調(diào)用第二個函數(shù)。如下:
//初始化并開始緩存
-(void)startCacheAdvertisingSuccess:(EventBlock)initSuccessBlock
failure:(EventBlock)initFailureBlock;
//開始播放
-(void)showAdvertisingWithCloseTipsTitle:(NSString*)closeTipsTitle
closeTipsContent:(NSString*)closeTipsContent
startPlay:(EventBlock)startPlayBlock
endPlay:(EventBlock)endPlayBlock
playFailure:(FailureBlock)playFailureBlock;
2、由于SDK緩存全看網(wǎng)速,在必要的時候,需要我手動遍歷,未cache的則調(diào)用loading,并做一些等待提示,緩存成功,需要直接播放。如果是自動緩存,則只有開發(fā)者調(diào)用時才播放。
-(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;
}
遇到的問題
在管理后臺新增一個應(yīng)用后,添加一個廣告位,只有一個廣告的時候,該廣告位為自動緩存的廣告位。
寫好自己的demo之后,使用了VungleSDK官方的文檔中提供的appID 和 placements,發(fā)現(xiàn)我的demo能夠正常播放廣告,可是使用了自己管理后臺的,就不能正常播放廣告,要么沒播放完就停止播放并且黑屏,要么點擊廣告關(guān)閉按鈕后黑屏。由此我猜想是:該廣告位對應(yīng)的測試狀態(tài)下的廣告有問題,不能正常緩存。
解決問題
于是,找了他們官方的文檔半天(大概是這個位置),才找到一個支持郵箱(monetize@vungle.com),于是有了以下對話:
我發(fā)郵件尋求幫助:

技術(shù)支持的回復(fù):(注意:這里說是一般需要30分鐘才生效?。?/p>

我的建議:

技術(shù)支持的回復(fù):

小結(jié)
有趣,VungleSDK很少人用?反正基本找不到相關(guān)的接入教程,相關(guān)官方文檔也沒有人評論,而官方文檔又沒有提示這個測試廣告有問題的幺蛾子!還好官方的工作人員郵件倒是回復(fù)的很快,因此結(jié)合文檔,堅定自己的判斷,就解決問題了。