菜单

iOS SDK接入常见问题

本文包含iOS、Unity、Flutter和Creator等相关疑问解答,在本文中的常见问题无法查找到的,还可以在 常见问题排查 查找。

1. 编译报错

1.1 接入Unity SDK后,编译报错 unity cannot use '@try' with Objective-C exceptions disabled.请问是怎么解决?(关键词:Unity、@try、编译报错)

答:修改路径 target(UnityFramework)——>Bulid Settings ——>Apple Clang-Language-Objective-C——>Enable Objective-C Exceptions——>YES 即可。

1.2 接入Unity SDK后,编译正常,但是运行起来后就崩溃,控制台会出现‘Library not loaded: @rapth/XX.framework/XXX ’。(关键词:Unity、@rapth、运行崩溃)

答:可以从以下两个途径来排除问题:
1、 Target——>Bulid Setting——>Runpath Search Paths ,添加 @executable_path/Frameworks
2、查看项目中的Podfile文件,是否有 use frameworks! ,将其移除后重新 pod install 项目。

1.3 集成SDK后与项目中的其他SDK冲突,怎么解决?(关键词:SDK重复、SDK冲突)

答:跟进报错的信息找到对应的库,如果是重复的导入,那么选择一个库保留;如果是类名或者属性名之类的冲突,就需要和相对应的平台或者我们反馈,协调解决命名冲突问题。

2. 对接疑问

2.1 关于接入TopOn SDK的原生自渲染信息流,点击没有反应,请问是怎么回事?(关键词:原生自渲染广告、点击没反应)

答:需要你检查一下接入原生自渲染信息流的步骤;
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;

2.2 收到用户的投诉,线上的产品要如何禁止掉给该用户投放广告?(关键词:用户投诉、投诉、禁止广告)

答:应急方案是说服用户给idfa设备号,然后在用该idfa添加一个空白的流量分组,可以让用户安装App——MyIDFA。 后续方案需要通过发版来解决,就是给用户一个用户ID,并通过设置customData->kATCustomDataUserIDKey,后续就能通过限制UserID来禁止广告下发了,可参考 说明文档 ,示例代码:

[ATAPI sharedInstance].customData = @{kATCustomDataUserIDKey:@"test_custom_user_id"};

2.3 如何实现加载一条原生获取3条offer素材,然后在代理中拿到3个offer广告来展示?(关键词:原生广告、多条原生、原生列表)

答:原生信息流可以通过设置路径: 聚合管理——高级设置——广告加载数(N) ,这样可以使得该广告位中的每一层广告源加载成功N个广告,举例,该广告位配置了两层的广告源,假设都加载缓存完毕,则缓存中的offer广告有2N个。
由于getNativeAdOfferWithPlacementID每次获取只能获得一个offer广告,所以建议通过for循环来获取多个offer并展示,当获取的结果为nil,则需要重新加载新的广告。
我们建议开发者一次for循环拿取的offer广告最好跟后台设置的请求条数一致,取完一次循环后重新load一轮原生信息流,这样保证获取的广告价值最优。

2.4 广告展示后,何时销毁ATBanner等这类offer,用户展示完关闭后就释放那些内存?(关键词:内存释放、移除缓存,销毁广告)

答:关于SDK中广告缓存移除的时机,开屏、激励视频和插屏广告这三个类型是在广告被关闭的时候,SDK会移除相应的对象持有和缓存,等待系统的回收内存;原生广告和横幅广告移除的时机是获取到广告的offer对象就会把缓存移除,当外界不在持有这个对象就会等待系统回收内存。

2.5 看完激励视频的广告,为什么没有下发奖励?(关键词:激励视频、奖励)

答:这类问题多数是由于广告播放状态有误,导致没有触发平台下发规则引起的,面对这类问题最好是拿出现这类问题时的日志来进行分析,查看是否有打印播放错误的日志,第二个点是能抓包获取该广告的素材信息给我对应平台的客服帮忙处理。

2.6 广告的相关代理回调会在子线程中吗?(关键词:代理回调、线程)

答:是有可能的,所以建议开发者如果要在代理中操作一些UI相关的,请添加回到主线程的操作。

2.7 日志中打印出"广告sdk未初始化成功,请在广告sdk初始化成功后再初始化内容sdk"?(关键词:初始化、加载失败)

答:因为三方广告的SDK需要先注册才能去加载广告,所以请开发者先调用我们的初始化方法。

2.8 开屏广告建议怎么集成?(关键词:开屏广告,建议集成)

答:一般开屏的逻辑我们是建议制作一个logo视图延续launch Screen的过程,底部正常的加载你们的主页面和广告,待一定时间或者开屏广告加载成功后,展示开屏视图,将logo视图移除,详细解释为主界面在logoView的时候就把他加载了,有开屏广告返回就show开屏广告,然后开屏广告出来后,将这个logoView移除,其他就是正常的逻辑了,如果开屏广告失败或者加载时间超过了你们的设定的时间,那么上面logoView就直接移除,不展示开屏广告了。

2.9 优量汇和Vungle自渲染信息流无法点击跳转?(关键词:优量汇,无法跳转)

答:优量汇平台的广告在自渲染的时候有一些特殊,需要调用一下 [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];
        }

2.10 咱们SDK可以支持插屏广告,用户点击后广告消失吗?(关键词:关闭广告)

答:各平台目前在开屏、插屏、激励视频和横幅广告,没有提供主动的关闭广告的API,所以无法实现这个需求。

2.11 假设我们的产品应用是VPN应用,应用启动的时候会代理上自己。所以拉广告的时候会通过代理网络拉取。我想你们这边能不能提供下广告拉取的域名,我们在我们的应用层过滤掉这些地址?(关键词:VPN、过滤域名)

答:各平台的加载的广告地址可能是变动的,无法提供对应的域名来进行过滤。

2.12 加载banner 广告。然后展示完移除之后再次加载就一直出不来了?(关键词:banner、横幅、加载失败)

答:横幅广告有一项特别的功能,就是TopOn后台聚合管理--高级设置中的自动刷新功能,该功能在横幅广告展示成功之后开启,开发者并不用关心横幅的加载问题,当开发者将横幅移除之后,下次要展示的时候,可以直接是判断该广告位是否准备就绪(isReady),准备好了可直接获取广告素材来展示,没有准备好,可手动尝试load横幅广告,也可以配合后台的请求失败重试,这样能在加载失败的时候,再次发起一次请求。

2.13 现在的有一个场景是,我们在topon就是一个综合的激励广告位,然后我们内部有广告入口entry,跟你们的广告场景类似。我们现在想把entry这个参数(指的是extra)在具体播放的时候,设置成不同的值,传到后端。(关键词:激励视频、extra、服务器回调)

答:我们这边是跟各三方的规则是一样的,在load的时候传入的extra才有效,show的时候传入不同的USER CUSTOM DATA是无效的,所有这个需求可能无法实现,只能采用多个广告位来进行了。

2.14 我们能否在load之前拿到A/B测试分组的id,这样能加载不同的兜底广告?(关键词:A/B分组、分组id)

答:目前没有办法获取A/B测试分组的id,所以实现不了这个,topon这边没法区分A/B测试的兜底广告请求。

2.15 如果是传统的瀑布流的版位广告,我跟对接各个第三方平台的回调应该能够拿到对应平台的回调,是可以防止客户端mock方法的。但是如果是服务器bidding的广告呢?那这个回调是要接topon的回调吗??(关键词:Bidding、服务器回调、TopOn服务器回调)

答:这个bidding和普通的激励视频服务器回调是一样的,是在触发奖励下发时机。区别在于 使用TopOn这边是通过SDK触发代理后,给服务器发请求,然后服务器给你们的地址放请求,免去你们重复去对接多个平台的过程,不过防刷这块你们还是需要添加自己的限制。三方平台的激励回调,就是你们服务器对接不同平台返回的请求格式,一一匹配,好处就是具备一定的防刷。

3. 广告填充失败

3.1 加载Mete(Facebook)广告一直失败,请问是怎么回事?(关键词:Meta、加载失败)

答:首先确认一下是否按着我们 对接文档 进行测试的,如果还是没有广告填充,可以更换测试设备,等待一段时间请求,或者试着切换一下VPN加载。可以留意加载失败的原因;其次是使用调式模式,调式模式是Meta给外界提供的测试广告ID,但也不能保证100%的填充;最后如果还有不懂可反馈给技术支持。

// 测试竞价广告请设置该值,能提高填充率
[ATAPI setHeaderBiddingTestModeWithDeviceID:@"you device idfa"];
// 实现<ATAdLoadingDelegate>代理
- (void)didFailBiddingADSourceWithPlacementID:(NSString*)placementID extra:(NSDictionary*)extra error:(NSError*)error;

3.2 加载竞价广告(S2S和C2S),没有成功,返回是1003错误码?(关键词:竞价广告、1003)

答:竞价广告会比正常广告多一个步骤,获取bidToken的步骤,此时并没有实际发起加载广告素材,此时我们可以通过代理 ATAdLoadingDelegate 中含有Bidding的API获取竞价的状态,包括成功或失败的原因,所以是竞价类型的广告加载失败请求时,可以增加这一步排查。

4. 广告展示异常

4.1 点击开屏广告后,广告详情没跳转,广告展示页也关闭了,这是什么情况?(关键词:广告跳转)

答:由于开屏广告应用内跳转是push的方式,无法跳转可能有两个原因,一是当前的控制器没有导航栏控制器,此时需要开发者添加一个导航栏;二是广告被点击后,广告展示页被dismiss移除,导致详情页无法展示,这个情况要查看在开屏广告关闭回调中是否有移除当前展示的控制器的操作。

4.2 加载激励视频成功,但是调用了showAPI无法展示广告?(关键词:无法展示、展示失败)

答:这类问题可以扩展到其他类型的广告。需要查看控制台打印的log来进行排查,排查的关键点;一是代理中的展示失败回调(横幅和原生信息流没有),根据失败的提示进行解决;二是没有代理或者是代理没有错误打印,此时需要仔细的找日志中关键信息,可定位控制台信息之后的错误打印信息,然后解决或者反馈给我们。

💚💚 ATAdLogger(UA_6.1.88) Message:
API invocation info:
*****************************
    "ad_type" = xxxxx;
    api = show;
    "placement_id" = xxxxx;
    result = start;