在集成SDK进行初始化、广告加载、展示的过程中,如果发生任何的异常或操作失败,如广告无填充、展示失败等,SDK都会在回调接口的失败事件中返回对应的错误信息,包括错误码和错误消息,来指示当前问题的具体原因。
如,初始化操作是通过InitCallback回调接口的onError事件方法,而广告展示操作则是通过各个广告单元的Listener回调接口,如激励视频的RewardedVideoListener
回调接口,通过回调事件方法onRewardedVideoAdShowFailed来通知激励视频加载展示过程中可能出现的失败。失败事件的唯一参数error是一个AdTimingError类的对象,从中可以解析到错误码和错误消息,籍此您可以判断错误并通过错误诊断找到解决方法。
而广告的加载操作,由于激励视频和插屏广告由智能库存引擎自动加载和缓存广告,所以没有load方法和对应的事件回调,广告加载相关的失败提示通过SDK日志返回,您可以在日志中获取到错误码和错误消息。
具体错误代码和诊断方法请参见Android SDK下载 与集成、广告单元和错误诊断。
下面我们对开发者在集成过程中容易出现的问题做一个简单的汇总,有助于您理清思路。
●
SDK初始化错误/缺少AdTiming AppKey
请注意AppKey的格式和准确性,否则AdTiming将无法判断哪个应用发送了广告请求。请勿在iOS系统上使用安卓AppKey,反之亦然。
●
AndroidManifest.xml中缺少必要的权限设置
如果缺少必要权限,SDK将无法正常运行。
AdTiming SDK只需要最少的必要权限:网络权限,添加下面的的permission脚本到您的AndroidManifest.xml 文件的<manifest> 中
<application>
<!-- Required permissions -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
●
安卓设备上缺少或禁用了GooglePlay服务
Adtiming SDK的安卓版本基于GooglePlay服务工作。
在极少数情况下,有些开发者反馈某些第三方ROM缺少GooglePlay服务,或无法被SDK正常调用。请确保您的设备上安装并启用了GooglePlay服务。
●
缺少第三方Ad Network的SDK或Adapter
我们注意到开发者们往往会忘记在项目中添加需要被聚合的广告平台的SDK和Adapter。
请务必按帮助文档的指示确保将被聚合的广告平台SDK和adapter都加上。使用自动方式集成非常简单,集成指导文档中有每个平台的集成脚本,您只需拷贝到项目的gradle文件即可。如下图所示
●
忘记调用SDK的init()方法
只有在调用init()方法后才可能正常加载和展示广告。
●
>尝试在SDK初始化结束之前加载广告
最佳方法是在onSuccess()回调中进行load()首次调用。
●
广告位类型不匹配
例如,您的代码使用为奖励视频广告创建的PlacementID处理插屏广告。
●
传递了错误的PlacementID参数
该PlacementID不存在,或属于另一个AppKey关联的应用。
●
广告加载前,instance已经被销毁。
请不要对广告使用临时Acticity,也不要在广告关闭前将其销毁。
●
在调用某个广告对象的destroy()之后再引用它
很显然这么干会出问题。 如果以后可能需要调用某个广告对象,请不要调用它的destroy()方法。 或者,您可以在销毁后重新再创建一个广告对象。
●
某些广告事件缺少回调方法
您的应用如果打算处理某些广告事件,请正确设置回调方法。 并且确保显式或隐式调用了load方法进行广告加载。 注意不要将超时时间设定得太短,否则可能收不到回调。
●
代码中缺少load方法进行广告加载,或在展示广告之前才调用load方法加载
需要说明的是,某些广告类型已经由SDK自动进行了隐式加载,所以不再需要您显示加载,但是除此以外的广告类型还是必须在app中调用load方法加载。在广告展示前请务必留有足够的时间使广告能完成加载到移动设备上。
●
没有在主UI线程中显示广告
有些广告平台如Admob,要求应用必须在主线程中显示广告,否则将不会有广告填充。因此您务必确保对isReady 和 showAd 方法的调用是在主线程中进行。
●
某些广告单元没有被某些Ad Network所填充
特定的Ad Network可能不提供某些广告类型,例如横幅广告,因此,如果您选择的广告平台正巧不支持这些类型的广告,将无法获得填充。
●
由于IP /国家/地区/设备/频率限制,无填充
一些广告投放是针对特定的国家/地区或IP地址段,并且规定了展现量上限。更换您的移动设备或使用新的IP地址,然后再次进行测试。
●
无广告填充
无广告填充有很多种原因,有时候是真的没有可用广告,但在集成过程中,可能需要检查一下是否有配置没有被正确设置。
首先,如果没有设置waterfall的话,服务器就没有可用的instance,所以您需要检查mediation
rule设置,确认waterfall中有active的instance或weight设置不为0。
然后,有可能当前设备或媒体的服务受到限制,需检查publisher账号状态、app状态、设备的广告追踪设置、SDK版本等。
综合来说,您需要按下面步骤逐步操作并尝试
1) 请到AdTiming前台检查并确认app是否处于激活状态。如app被删除或暂停服务,请联系我们的技术支持,可通过email或ticket方式,务必填写设备和媒体相关信息,并上传SDK日志。
2) 如果您使用了聚合功能,请检查mediation rules配置,确保至少有一个active的instance,并且instance的weight不能为0。
3) 分别尝试更换设备、更换IP地址、切换wifi等操作后进行请求,或将当前设备添加到测试模式中,以排除特定设备、投放地域和网络的限制,如该设备设置了限制广告跟踪,或当前地域无匹配广告。
4) 请更新最新版的SDK再进行尝试,以排除低版本SDK被限制服务的情况。
5) 如果问题依旧存在,请联系我们的技术支持,可通过email或ticket方式,务必填写设备和媒体相关信息,并上传SDK日志。
●
广告平台返回广告加载失败
广告平台返回的广告加载失败,具体原因需要依据日志中第三方平台sdk返回的错误信息进行判断。您需要根据返回的adn加载失败信息,查阅第三方平台的帮助文档,获得解决问题的方法。
一般来说,问题不只为以下几种:
1) 如果返回nofill 类型的错误: 尝试更换设备、更换IP地址、切换wifi等操作后进行请求,或将当前设备添加到该平台的测试模式中,以排除特定设备、投放地域和网络的限制。
2) 如果在实际运营中该平台的填充率较低,可以尝试降低该instance的底价,如果该问题依旧存在,建议更换其他平台。
3) 如果返回频次受限,则请放宽该平台广告的加载频次控制。
4) 如果返回平台内部错误,如超时或无效响应、请求广告出错、网络加载数据出错、服务器未知错误等,且多次尝试问题依旧,则建议更换其他平台尝试,或等平台恢复稳定后再次尝试。
5) 如果返回其他错误,如参数错误、无效的请求等,请通过email或ticket方式联系我们技术支持,上传日志和设备、媒体相关信息,帮助排查问题。