本文包含iOS、Unity、Flutter和Creator等相关疑问解答,在本文中的常见问题无法查找到的,还可以在常见问题排查查找。
答:修改路径 target(UnityFramework)——>Bulid Settings ——>Apple Clang-Language-Objective-C——>Enable Objective-C Exceptions——>YES 即可。
答:可以从以下两个途径来排除问题:
1、Target——>Bulid Setting——>Runpath Search Paths
,添加@executable_path/Frameworks
。
2、查看项目中的Podfile文件,是否有 use frameworks!
,将其移除后重新pod install
项目。
答:跟进报错的信息找到对应的库,如果是重复的导入,那么选择一个库保留;如果是类名或者属性名之类的冲突,就需要和相对应的平台或者我们反馈,协调解决命名冲突问题。
答:需要你检查一下接入原生自渲染信息流的步骤;
1、注册点击事件的控件,请不要将父视图和dislikeButton注册到点击事件中,不然点击关闭广告可能会触发点击的效果。特别说明,关于优量汇需要调用到[nativeADView getMediaView]获取优量汇的媒体视图,通过isVideoContents来判断是否为视频广告来添加mediaView视图。
2、绑定自渲染视图跟SDK内部视图控件的关系。
3、调用渲染视图方法。
// 1、注册点击事件的控件
- (void)registerClickableViewArray:(NSArray *)registerClickViewArray;
//2、绑定自渲染视图跟SDK内部视图控件的关系
+ (instancetype)loadPrepareInfo: (void(^)(ATNativePrepareInfo *prepareInfo))loadPrepareInfoBlock;
//3、调用渲染视图方法
- (void) rendererWithConfiguration:(ATNativeADConfiguration*)configuration selfRenderView:(UIView *_Nullable)selfRenderView nativeADView:(ATNativeADView *)nativeADView;
答:应急方案是说服用户给idfa设备号,然后在用该idfa添加一个空白的流量分组,可以让用户安装App——MyIDFA。 后续方案需要通过发版来解决,就是给用户一个用户ID,并通过设置customData->kATCustomDataUserIDKey,后续就能通过限制UserID来禁止广告下发了,可参考说明文档,示例代码:
[ATAPI sharedInstance].customData = @{kATCustomDataUserIDKey:@"test_custom_user_id"};
答:原生信息流可以通过设置路径:聚合管理——高级设置——广告加载数(N),这样可以使得该广告位中的每一层广告源加载成功N个广告,举例,该广告位配置了两层的广告源,假设都加载缓存完毕,则缓存中的offer广告有2N个。
由于getNativeAdOfferWithPlacementID每次获取只能获得一个offer广告,所以建议通过for循环来获取多个offer并展示,当获取的结果为nil,则需要重新加载新的广告。
我们建议开发者一次for循环拿取的offer广告最好跟后台设置的请求条数一致,取完一次循环后重新load一轮原生信息流,这样保证获取的广告价值最优。
答:关于SDK中广告缓存移除的时机,开屏、激励视频和插屏广告这三个类型是在广告被关闭的时候,SDK会移除相应的对象持有和缓存,等待系统的回收内存;原生广告和横幅广告移除的时机是获取到广告的offer对象就会把缓存移除,当外界不在持有这个对象就会等待系统回收内存。
答:这类问题多数是由于广告播放状态有误,导致没有触发平台下发规则引起的,面对这类问题最好是拿出现这类问题时的日志来进行分析,查看是否有打印播放错误的日志,第二个点是能抓包获取该广告的素材信息给我对应平台的客服帮忙处理。
答:是有可能的,所以建议开发者如果要在代理中操作一些UI相关的,请添加回到主线程的操作。
答:因为三方广告的SDK需要先注册才能去加载广告,所以请开发者先调用我们的初始化方法。
答:一般开屏的逻辑我们是建议制作一个logo视图延续launch Screen的过程,底部正常的加载你们的主页面和广告,待一定时间或者开屏广告加载成功后,展示开屏视图,将logo视图移除,详细解释为主界面在logoView的时候就把他加载了,有开屏广告返回就show开屏广告,然后开屏广告出来后,将这个logoView移除,其他就是正常的逻辑了,如果开屏广告失败或者加载时间超过了你们的设定的时间,那么上面logoView就直接移除,不展示开屏广告了。
答:优量汇平台的广告在自渲染的时候有一些特殊,需要调用一下 [nativeADView getMediaView];
来触发这个点击事件,当然如果不是视频类的广告,可不用添加到自渲染的父视图上。可参考下面示例:
Vungle平台的mediaView在注册的时候回传给Vungle,所以需要调用一下来创建Vungle的mediaView。
// 优量汇和Vungel原生自渲染信息解决点击无反应的方法
if (offer.networkFirmID == 8 || offer.networkFirmID == 13) { //当广告平台为优量汇和Vungle的时候,获取一下mediaView。
[nativeADView getMediaView];
}
/* ----------------------------------------------- */
// 优量汇还有一种比较好的方式
[nativeADView getMediaView];
// 在添加mediaView的时候区分一下
if (offer.networkFirmID ==8 && offer.nativeAd.isVideoContents==NO) {//当为优量汇且为图片广告时,将mediaView置于自渲染底层接受点击事件,
[selfRenderView insertSubview:mediaView atIndex:0];
} else {
[selfRenderView addSubview:mediaView];
}
答:各平台目前在开屏、插屏、激励视频和横幅广告,没有提供主动的关闭广告的API,所以无法实现这个需求。
答:各平台的加载的广告地址可能是变动的,无法提供对应的域名来进行过滤。
答:横幅广告有一项特别的功能,就是Taku后台聚合管理--高级设置中的自动刷新功能,该功能在横幅广告展示成功之后开启,开发者并不用关心横幅的加载问题,当开发者将横幅移除之后,下次要展示的时候,可以直接是判断该广告位是否准备就绪(isReady),准备好了可直接获取广告素材来展示,没有准备好,可手动尝试load横幅广告,也可以配合后台的请求失败重试,这样能在加载失败的时候,再次发起一次请求。
答:我们这边是跟各三方的规则是一样的,在load的时候传入的extra才有效,show的时候传入不同的USERCUSTOMDATA是无效的,所有这个需求可能无法实现,只能采用多个广告位来进行了。
答:目前没有办法获取A/B测试分组的id,所以实现不了这个,Taku这边没法区分A/B测试的兜底广告请求。
答:这个bidding和普通的激励视频服务器回调是一样的,是在触发奖励下发时机。区别在于 使用Taku这边是通过SDK触发代理后,给服务器发请求,然后服务器给你们的地址放请求,免去你们重复去对接多个平台的过程,不过防刷这块你们还是需要添加自己的限制。三方平台的激励回调,就是你们服务器对接不同平台返回的请求格式,一一匹配,好处就是具备一定的防刷。
答:首先确认一下是否按着我们对接文档进行测试的,如果还是没有广告填充,可以更换测试设备,等待一段时间请求,或者试着切换一下VPN加载。可以留意加载失败的原因;其次是使用调式模式,调式模式是Meta给外界提供的测试广告ID,但也不能保证100%的填充;最后如果还有不懂可反馈给技术支持。
// 测试竞价广告请设置该值,能提高填充率
[ATAPI setHeaderBiddingTestModeWithDeviceID:@"you device idfa"];
// 实现代理
- (void)didFailBiddingADSourceWithPlacementID:(NSString*)placementID extra:(NSDictionary*)extra error:(NSError*)error;
答:竞价广告会比正常广告多一个步骤,获取bidToken的步骤,此时并没有实际发起加载广告素材,此时我们可以通过代理ATAdLoadingDelegate
中含有Bidding的API获取竞价的状态,包括成功或失败的原因,所以是竞价类型的广告加载失败请求时,可以增加这一步排查。
答:由于开屏广告应用内跳转是push的方式,无法跳转可能有两个原因,一是当前的控制器没有导航栏控制器,此时需要开发者添加一个导航栏;二是广告被点击后,广告展示页被dismiss移除,导致详情页无法展示,这个情况要查看在开屏广告关闭回调中是否有移除当前展示的控制器的操作。
答:这类问题可以扩展到其他类型的广告。需要查看控制台打印的log来进行排查,排查的关键点;一是代理中的展示失败回调(横幅和原生信息流没有),根据失败的提示进行解决;二是没有代理或者是代理没有错误打印,此时需要仔细的找日志中关键信息,可定位控制台信息之后的错误打印信息,然后解决或者反馈给我们。
💚💚 ATAdLogger(UA_6.1.88) Message:
API invocation info:
*****************************
{
"ad_type" = xxxxx;
api = show;
"placement_id" = xxxxx;
result = start;
}
这里举例一个常见错误示例:
// admob广告平台的报错
Error Domaincom.google.admob Code17 "The provided view controller is already presenting another view controller."
UserInfoNSLocalizedDescription The provided view controller is already presenting another view controller.
// iOS系统报错(常见是这个错误)
Warning: Attempt to present <UIViewController: 0x7fbcd2104220> on <ViewController: 0x7fccefd0e110>
which is already presenting <UIViewController: 0x7fbcd2104220>
这个报错大概的原因是在一个已经presented 的控制器又调用present新控制器,导致这个报错,解决的办法是使用其他的控制器来present广告素材,比如当前的栈顶控制器。
// 展示开屏报错
Attempt to present AdVc on VC whose view is not in the window hierarchy!
该报错是显示错误,警告:尝试显示其视图不在窗口层次结构中!这是因为呈现视图控制器(即self )未添加为子视图控制器。 您可以通过在[UIApplication sharedApplication].keyWindow.rootViewController,而不是self上显示您的vc来解决该警告 。另一个排除的方向是视图控制器的视图只被创建,但没有添加到任何视图层次结构中。 如果你想从那个视图控制器中尽快出现,你应该在viewDidAppear中做最安全。
答:首先由于广告平台下发素材可能存在是http的情况,所以请检查一下Http权限是否授权;其次网络环境是否正常,网络环境异常会导致素材加载失败或过慢造成黑屏;再者是通过抓包拿到这个素材的信息,反馈到对应平台,让他们排查素材的正确性或者屏蔽该广告。
如果是关闭按钮这类问题,由于广告类型的原因可能出现关闭按钮的时间不一定相同,比如激励视频,正常是在观看完广告的时候才显示,此时可以查看一下该代码位(三方广告位)的设置是否允许出现关闭按钮,其他广告类型页有相应的关闭按钮设置,还请先查看一下。其次是除了自渲染信息流是开发者自渲染外,其他的广告都是由平台返回的,出现缺失的情况需要先通过logo确认是哪个广告平台的广告,然后获取到广告素材的地址,可能需要抓包、截图或者录屏等以便能提供给平台排查问题素材,例如穿山甲平台可通过点击logo图标获取他们素材的地址,最后反馈到出现问题的广告平台寻求解决。
答:确认好SDK的版本,是哪个广告平台,广告平台的SDK版本是哪个,通过录屏将相关的信息给到对应的广告平台,如果可以的话,mock素材的地址给平台。
答:1、先确认是否该横幅广告位开启了自动刷新功能,如果开启了,那么你只需第一次调用加载的API即可,后面由SDK内部进行加载,你可以选择符合你们需求的方案。
2、移除广告的时候是否将bannerView设置为nil。
答:由于部分平台的横幅广告是有固定尺寸的限制,例如穿山甲、优量汇和Mintegral等,所以我们建议在配置横幅广告位时,选择比例相近的模板,通过广告尺寸或尺寸比例进行加载和展示。例如配置的穿山甲横幅广告640*100,为了能填充完屏幕宽,计算高度H = (屏幕宽 *100)/640;那么在load的extra的size为(屏幕宽:H)。
答:给configuration.mediaViewFrame设置frame,还有获取mediaView的时候,也要给它设置frame。
答:这个可能的原因是在加载激励视频的时候,设备的方向处于横屏的状态,导致加载的广告适配了横屏,然后在展示的时候设备方向回到竖屏来展示,导致这么一个现象。
答:目前暂不支持使用xib等拖线控件的方式集成admob的原生自渲染广告,请使用手动创建的方式来集成。
答:Unity项目不支持在同个界面展示两个或两个以上的原生信息流广告。
答:由于Admob的原生自渲染广告需要用他们提供的GADNativeAdView来展示,所以我们SDK内部会进行一次转换透传,因此在集成含有Admob原生自渲染广告时,不支持使用xib或storyboard这类系统拖控件的方式设置自渲染视图,因为这类视图在SDK内部渲染GADNativeAdView的时候,可能拿不到frame导致展示时UI位置异常。代码集成的方式也希望在rendererWithConfiguration:selfRenderView:nativeADView
之前保证各子控件的frame有值。