bidding系列3——Mopub 5.12.0源碼

今天從源碼角度分析一下mopub,

以下內(nèi)容基于Mopub 5.12.0 Android源碼,github上可以下載到斤吐,通過閱讀源碼,理清邏輯厨喂,找到自己想要的答案和措。

1.初始化入口

MoPub.initializeSdk(mContext, sdkConfiguration, initSdkListener());

Mopub.java類第175行initializeSdk方法;

作用蜕煌,初始化mopub SDK派阱;在請求激勵廣告或者bidding前調(diào)用該方法,這個方法將對自定義adpater調(diào)用任意次數(shù)幌绍,但是SDK自己僅僅初始化一次颁褂。

第178行~184行,檢測context傀广,sdkConfiguration是否為空颁独,打印log

第185行~190行,判斷Application info是否為空伪冰,然后打印日志

第191行~195行誓酒,初始化激勵視頻 initializeRewardedVideo(activity, sdkConfiguration);

Mopub.java類第357行~375行,是initializeRewardedVideo

第358行~360行贮聂,檢測activity靠柑,sdkConfiguration是否為空

第362行~366行,通過Reflection.MethodBuilder

new Reflection.MethodBuilder Reflection.java類中吓懈,第34行~45行歼冰;確定反射類名,initializeRewardedVideo setStatic("com.mopub.mobileads.MoPubRewardedVideos"), 設(shè)定反射修飾符為static setAccessible 設(shè)定mIsAccessible耻警,設(shè)定訪問權(quán)限

addParam隔嫡,傳入當(dāng)前activity

addParam甸怕,傳入當(dāng)前sdkConfiguration

execute方法,98行~118行腮恩;獲取class名梢杭;方法名,添加參數(shù)秸滴;判斷是否Accessible武契,是否Static;然后執(zhí)行method.invoke(如何執(zhí)行sdkConfiguration傳入進(jìn)來的參數(shù))

第367行~375行荡含,捕獲反射的異常

第196行~200行咒唆,如果mopub已經(jīng)初始化完畢,向外拋initializationFinished回調(diào)内颗,

第201行~205行钧排,如果mopub正在初始化敦腔,直接return掉

第206行~210行均澳,判斷當(dāng)前線程是否是主線程,mopub只能在主線程初始化

第211行~215行符衔;設(shè)置正在初始化的標(biāo)記位為true找前;確保當(dāng)前的請求在主線程

第216行~221行,定義兩個final sdk初始化狀態(tài)的監(jiān)聽類

第389行~407行判族,靜態(tài)類InternalSdkInitializationListener躺盛,主要作用,當(dāng)收到sdk初始化完成的回調(diào)形帮,向上拋槽惫,sdk初始化完成的回調(diào)。就是初始化mopubsdk的第3個參數(shù)辩撑。

類CompositeSdkInitializationListener界斜,的作用是,將初始化的回調(diào)合冀,合并,一次發(fā)送君躺。(這個類寫的很巧妙峭判,可以學(xué)習(xí)下)

定義了一個mTimes參數(shù)棕叫,當(dāng)收到一次回調(diào),這個次數(shù)就減1俺泣,當(dāng)mTimes小于等于0時疗认,就觸發(fā)向外拋初始化成功的回調(diào)急侥。


@Override

public void onInitializationFinished() {

mTimes--;

if (mTimes <= 0) {

new Handler(Looper.getMainLooper()).post(new Runnable() {

@Override

public void run() {

if (mSdkInitializationListener != null) {

mSdkInitializationListener.onInitializationFinished();

mSdkInitializationListener = null;

}

}

});

}

}



第222行~第225行,實例PersonalInfoManager類坏怪,處理用戶個人信息,如GDPR铝宵,等

第226行,單例獲取ClientMetadata华畏,用戶手機(jī)鹏秋,網(wǎng)絡(luò)等相關(guān)信息;單例用的雙重校驗鎖 DCL

第227行~第233行亡笑,實例化AdapterConfigurationManager侣夷,通過異步線程獲得bidding相關(guān)數(shù)據(jù)仑乌,并存儲到內(nèi)存中,供后面查詢調(diào)用晰甚。

2.Mopub加載激勵視頻入口

MopubRewardedVideos.loadRewardedVideo(rewardedId, new MopubRewardedVideoManager.RequestParameters(null,null));

MopubRewardedVideos.class

第47-52行,loadRewardedVideo厕九,

49行,檢查傳進(jìn)來的參數(shù)是否為空扁远,Preconditions.checkNotNull(adUnitId);

50行,加載激勵視頻畅买,MopubRewardedVideoManager.loadVideo(adUnitId, requestParameters, mediationSettings);

MopubRewardedVideoManager.class

第176-209行,加載激勵視頻

178-180行皮获,檢查單例是否為空,空就報錯

181-184行购公,如果當(dāng)前播放廣告的id,和傳進(jìn)來的廣告id相同宏浩,那么就打印log靠瞎,不再向下執(zhí)行

184-194行比庄,如果當(dāng)前緩存的廣告id和傳進(jìn)來的廣告id相同,那么就對外發(fā)送廣告已加載的回調(diào)佳窑,不再向下執(zhí)行

195-209行,加載廣告

206行净神,加載激勵廣告溉委,loadVideo(adUnitId,(String)urlGenerator.generateUrlString(Constants.HOST), (MoPubErrorCode)null)

211-217行鹃唯,加載激勵視頻瓣喊,sInstance.fetchAd(adUnitId, adUrlString, errorCode)

219-226行,加載激勵視頻藻三,判斷當(dāng)前id是否正在加載;rewardedAdsLoaders.loadNextAd(mContext, adUnitId, adUrlString, errorCode);

RewardedAdsLoaders.class

32-43行趴酣,loadNextAd,

37-40行岖寞,判斷adLoader是否為空柜蜈,adLoader是否有已經(jīng)緩存的廣告,空或者無廣告淑履,就執(zhí)行mAdUnitToAdLoader.put(adUnitId, adLoader);

42行隶垮,adloader.loadNextAd(errorCode);執(zhí)行加載的邏輯

AdLoader.java 廣告加載核心類

133-219行秘噪,loadNextAd方法,waterfall的邏輯主要是在loadNextAd方法中實現(xiàn)的指煎,廣告是異步加載的,廣告可能來自內(nèi)部緩存或者從服務(wù)端下載至壤。請確保調(diào)用加載廣告前,調(diào)用hasMoreAds方法

175行黎棠,fetchAd(mMultiAdRequest, mContext.get());//第一次請求

260-287行晋渺,通過網(wǎng)絡(luò)庫請求

3.加載核心位置

AdLoader.java 第175行fetchAd(mMultiAdRequest, mContext.get());//first request 第一次請求

268行脓斩,fetchAd()方法 283-286行,RequestQueue request =Networking.getRequestQueue(context); 通過Volley進(jìn)行請求

Networking.java 98行 requestQueue = new MoPubRequestQueue(cache, network);

MopubRequestQueue.java 58行随静,addDelayedRequest(@NonNull Request<?> request, int delayMs)

    addDelayedRequest(request, new DelayedRequestHelper(request, delayMs));

RequestManager.java 60行, makeRequest(@NonNull T requestFactory, @NonNull BackoffPolicy backoffPolicy)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叼丑,一起剝皮案震驚了整個濱河市扛门,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌论寨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绰垂,死亡現(xiàn)場離奇詭異,居然都是意外死亡劲装,警方通過查閱死者的電腦和手機(jī)昌简,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纯赎,“玉大人,你說我怎么就攤上這事犬金。” “怎么了峰伙?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵音同,是天一觀的道長。 經(jīng)常有香客問我权均,道長锅锨,這世上最難降的妖魔是什么恋沃? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮囊咏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梅割。我一直安慰自己,他們只是感情好户辞,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布底燎。 她就那樣靜靜地躺著刃榨,像睡著了一般双仍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朱沃,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機(jī)與錄音呕屎,去河邊找鬼敬察。 笑死,一個胖子當(dāng)著我的面吹牛莲祸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锐帜,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼畜号,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了简软?” 一聲冷哼從身側(cè)響起述暂,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤建炫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肛跌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡转唉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年稳捆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眷柔。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖驯嘱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茂蚓,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布聋涨,位于F島的核電站负乡,受9級特大地震影響牍白,放射性物質(zhì)發(fā)生泄漏抖棘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一最岗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧般渡,春花似錦、人聲如沸驯用。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至淘这,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铝穷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工晦炊, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人断国。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓榆苞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坐漏。 傳聞我的和親對象是個殘疾皇子薄疚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354