场景描述:现集成的多个第三方sdk中。(需要去加载第三方的数据和素材,串行顺序发起不同第三方sdk请求的场景)
1、有的第三方sdk有两个加载成功回调,一个是didload(数据加载完成)另一个是addidload(素材加载完成),结束。
2、有的第三方sdk只有一个回调:didload(数据和素材加载完成),现有逻辑是在发起请求后,一定的时间内,广告素材没加载完成,则超时错误。请求下一个(素材加载完成是在数据加载完成之后回调)
新逻辑:新增数据加载超时错误,(数据加载超时比素材加载超时短)超时则请求下一个,未超时,不处理,等待素材加载。素材加载超时,则请求下一个。
目的:为了缩短数据请求时间。节省数据加载超时和素材加载超时的过程。
服务器针对每一个不同第三方下发dataOutTime和resourceOutTime两个参数,如果只有一个素材加载成功回调的第三方,则只下发resourceOutTime这一个参数。
didload回调中调用一个block,这个block 在发起请求开始后,5秒内可以有效更改isDataLoaded 参数执行。
伪代码:
if (dataOutTime != nil ){
__block bool isDataLoaded = no;
block(){
isDataLoaded = yes
}
Dispatch_after( dataOutTime ){
if ( !isDataLoaded){
数据加载超时逻辑。。。。
}
}
}
Dispatch_after( resourceOutTime ){
素材加载超时逻辑。。。。
}
在各个第三方有两套sdk 的didload回调代码中调用block,如果在dataOutTime时间之后调用,那么在dataOutTime时间到的时候block没有调用,则isDataLoaded参数为no,执行数据加载超时逻辑;在dataOutTime内回调didload并执行block,则isDataLoaded参数为yes,不做任何操作。