bidding系列3——Mopub 5.12.0源码

今天从源码角度分析一下mopub,

以下内容基于Mopub 5.12.0 Android源码,github上可以下载到,通过阅读源码,理清逻辑,找到自己想要的答案。

1.初始化入口

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

Mopub.java类第175行initializeSdk方法;

作用,初始化mopub SDK;在请求激励广告或者bidding前调用该方法,这个方法将对自定义adpater调用任意次数,但是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"), 设定反射修饰符为static setAccessible 设定mIsAccessible,设定访问权限

addParam,传入当前activity

addParam,传入当前sdkConfiguration

execute方法,98行~118行;获取class名;方法名,添加参数;判断是否Accessible,是否Static;然后执行method.invoke(如何执行sdkConfiguration传入进来的参数)

第367行~375行,捕获反射的异常

第196行~200行,如果mopub已经初始化完毕,向外抛initializationFinished回调,

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

第206行~210行,判断当前线程是否是主线程,mopub只能在主线程初始化

第211行~215行;设置正在初始化的标记位为true;确保当前的请求在主线程

第216行~221行,定义两个final sdk初始化状态的监听类

第389行~407行,静态类InternalSdkInitializationListener,主要作用,当收到sdk初始化完成的回调,向上抛,sdk初始化完成的回调。就是初始化mopubsdk的第3个参数。

类CompositeSdkInitializationListener,的作用是,将初始化的回调,合并,一次发送。(这个类写的很巧妙,可以学习下)

定义了一个mTimes参数,当收到一次回调,这个次数就减1,当mTimes小于等于0时,就触发向外抛初始化成功的回调。


@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,用户手机,网络等相关信息;单例用的双重校验锁 DCL

第227行~第233行,实例化AdapterConfigurationManager,通过异步线程获得bidding相关数据,并存储到内存中,供后面查询调用。

2.Mopub加载激励视频入口

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

MopubRewardedVideos.class

第47-52行,loadRewardedVideo,

49行,检查传进来的参数是否为空,Preconditions.checkNotNull(adUnitId);

50行,加载激励视频,MopubRewardedVideoManager.loadVideo(adUnitId, requestParameters, mediationSettings);

MopubRewardedVideoManager.class

第176-209行,加载激励视频

178-180行,检查单例是否为空,空就报错

181-184行,如果当前播放广告的id,和传进来的广告id相同,那么就打印log,不再向下执行

184-194行,如果当前缓存的广告id和传进来的广告id相同,那么就对外发送广告已加载的回调,不再向下执行

195-209行,加载广告

206行,加载激励广告,loadVideo(adUnitId,(String)urlGenerator.generateUrlString(Constants.HOST), (MoPubErrorCode)null)

211-217行,加载激励视频,sInstance.fetchAd(adUnitId, adUrlString, errorCode)

219-226行,加载激励视频,判断当前id是否正在加载;rewardedAdsLoaders.loadNextAd(mContext, adUnitId, adUrlString, errorCode);

RewardedAdsLoaders.class

32-43行,loadNextAd,

37-40行,判断adLoader是否为空,adLoader是否有已经缓存的广告,空或者无广告,就执行mAdUnitToAdLoader.put(adUnitId, adLoader);

42行,adloader.loadNextAd(errorCode);执行加载的逻辑

AdLoader.java 广告加载核心类

133-219行,loadNextAd方法,waterfall的逻辑主要是在loadNextAd方法中实现的,广告是异步加载的,广告可能来自内部缓存或者从服务端下载。请确保调用加载广告前,调用hasMoreAds方法

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

260-287行,通过网络库请求

3.加载核心位置

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

268行,fetchAd()方法 283-286行,RequestQueue request =Networking.getRequestQueue(context); 通过Volley进行请求

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)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353