常见问题
常见问题
接入与编译
请使用真机测试
SDK 不支持模拟器运行,需要使用真机进行调试
编译时报错 Build is failing with unexpected element <queries> found in <manifest> 或类似错误,关键词为 <queries>
这个是 Android11 的版本适配声明,需要升级 gradle 插件版本大于 4.0 或手动编辑 SDK 的 aar 中 AndroidManifest.xml
,移除<application>
标签下的<queries>
内容
编译时报错 Unknown option '-keep' in line 1 of file 'xxxx\proguard.txt'
需要升级 gradle 插件版本大于 4.0 或手动将 SDK 的 aar 中proguard.txt
内容复制到工程的混淆配置中,并在 aar 中删除该文件
出现 Duplicate class xxx 错误
需要使用兼容版,并将没有冲突的 aar 全部引用
SDK 初始化时机
SDK 支持延迟初始化,但需要确保 SDK 在主进程初始化,且第一次调用广告位与发起初始化之间有 1s 的间隔
出现 java.lang.NoSuchFieldException: No field mMaxHeight in class Landroid/widget/ImageView; 错误
需要将工程的 targetSdkVersion 降为28或以下
编译时出现 AndroidManifest 的 networkSecurityConfig 错误
需手动删除 SDK 包中 AndroidManifest.xml
的 <application>
标签下关于 networkSecurityConfig 的配置,并确保应用的 networkSecurityConfig 中配置了 usesCleartextTraffic=true
请求广告时出现 Crash ,错误信息为方法错误、方法校验失败等
需要更新至最新版本SDK
请求广告时报错 包名不匹配
使用测试 ID 拉取广告时,需要将应用的applicationId
也修改为测试的包名
Android11 设备使用移动网络时,无法加载广告且没有回调
修改应用的 targetSdkVersion 小于 30 或更新 SDK
初始化
初始化报错 init error#java.lang.IllegalStateException:ignore init on process:com.xxx.yyy:zzzz
SDK不支持多进程调用,子进程的初始化会被忽略,调用时会抛出错误信息日志,但子进程的错误不影响主进程的调用,可以忽略
开屏广告
开屏广告的跳转设置
确认 ZJSplashAdInteractionListener 中的
onSplashAdClose()
、onSplashAdShowError()
回调方法都有做跳转的响应确认开屏广告页面没有做超时自动跳转,只通过以上回调方法作为判断去跳转页面
开屏广告报错 找不到广告位
开屏广告ZJSplashAd#load
方法需要在收到 SDK 初始化成功的回调后调用,直接在应用的SplashActivity#onCreate
生命周期内直接创建可能返回初始化失败的错误
请求开屏广告时打印日志 '未Start'
开屏广告ZJSplashAd#load
的请求可以在OnStartListener#onStartSuccess()
回调后增加一个 500ms 的 delay
电话、定位与存储权限获取
SDK 不强制获取权限,获取权限将帮助优化投放广告精准度和用户的交互体验,提高eCPM
开屏广告报错 "容器不可见" 或 "容器的高度低于400dp"
需要修改容器的高度大于设备屏幕高度的95%
需要确认开屏广告的容器没有其他组件覆盖
使用
RelativeLayout
或ConstraintLayout
时会偶现错误,建议使用FrameLayout
作为开屏广告的容器
开屏广告展示时回调错误,错误信息为 android.content.res.Resources$NotFoundException: Resource ID xxxxx
检查传入的 Context 对象是否为主进程的 Context,以及检查传入的 Context 对象的 Resources 是否为主应用的 Resources
开屏广告显示不完整
如果使用布局的根节点,或 include layout 的根节点作为开屏广告的容器,会出现显示不完整的情况,需要将开屏广告的容器设置为非根节点的 ViewGroup
开屏广告点击后,弹出的 activity 被广告结束后跳转的 MainActivity 遮挡
参照 demo 的写法,对开屏 activity 的 onPause()
、onResume()
、onSplashAdClick()
、onSplashAdClose()
回调做判断处理
private boolean isPaused; // 广告被点击后,当前activity是否pause
private boolean isAdClicked; // 广告被点击
private boolean isAdClosed; // 广告已结束
/**
* 记录应用pause
*/
@Override
protected void onPause() {
super.onPause();
if (isAdClicked) {
isPaused = true;
}
}
/**
* 记录应用resume
*/
@Override
protected void onResume() {
super.onResume();
if (isPaused && isAdClosed) {
jump();
} else {
isPaused = false;
}
}
/**
* 广告被点击
*/
@Override
public void onSplashAdClick() {
Log.d(TAG, "onSplashAdClick");
isAdClicked = true;
}
/**
* 广告被关闭
*/
@Override
public void onSplashAdClose() {
Log.d(TAG, "onSplashAdClose");
isAdClosed = true;
if (!isPaused) {
jump();
}
}
激励广告
激励广告的预加载
可参照示例工程的RewardVideoProvider
类控制激励广告的加载与展示。如使用预加载缓存对象,需要在展示前调用isValid()
方法判断有效性
激励广告显示黑屏
需要在AndroidManifest.xml
的<Application>
标签下配置android:hardwareAccelerated="true"
来开启硬件加速
激励广告播放时报错 android.content.res.Resources&NotFoundException: String resource ID #0x0
AndroidManifest 中<Application>
标签下的android:label
不能为字符串,需要使用@string/
引用
插屏广告
插屏广告请求后没有任何回调
插屏广告的请求和调用需要运行在主线程
插屏广告展现时背景为黑色
需要修改当前的主题设置中android:backgroundDimEnabled
项的值为true
视频内容
视频内容页切换 tab 后在后台播放
调用contentAd.hideAd()
方法隐藏,在切换回来时调用onResume()
方法和showAd(resId)
继续播放
视频内容页加载错误
需要引用 support-v4 库,见SDK 资源导入
视频内容页的计时与广告判断
视频内容的回调中可以根据播放状态计时
视频内容回调的
ContentItem
对象的id
属性为唯一标识,materialType
属性为视频类型视频内容的计时与计次任务演示可以参考示例工程
H5页面
H5任务页无法获取到任务
调用ZJH5Ad
时传入的ZjUser.userName
如有特殊字符,需要进行urlEncode
处理