常见问题
常见问题
接入与编译
请使用真机测试
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
minSdkVersion 冲突
ZJSDK 的 minSdkVersion 为 21,部分渠道 SDK 为 24,如果您的工程最低支持 21,请在主 module 的AndroidManifest.xml中添加<uses-sdk tools:overrideLibrary="com.bytedance.gromore,com.bytedance.sdk.openadsdk,com.bytedance.tools"/> 如配置中已有tools:overrideLibrary,则追加内容
android:label 冲突
请在主 module->AndroidManifest.xml-><Application节点下添加android:lable="YOUR_LABEL"配置,然后追加tools:replace="android:label配置以覆盖
如果提示找不到 tools 的 NS,在<Manifest节点追加xmlns:tools="http://schemas.android.com/tools"
android:allowBackup 冲突
请在主 module->AndroidManifest.xml-><Application节点下添加android:allowBackup="YOUR_STRATEGY"配置,然后追加tools:replace="android:allowBackup配置以覆盖
如果提示找不到 tools 的 NS,在<Manifest节点追加xmlns:tools="http://schemas.android.com/tools"
初始化
初始化报错 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 var isPaused = false // 广告被点击后,当前activity是否pause
private var isAdClicked = false // 广告被点击
private var isAdClosed = false // 广告已结束
private fun loadAd() {
// 加载广告
ZJSplashAd.loadAd(this, posId, object : ZJSplashAdLoadListener {
override fun onError(code: Int, msg: String) {
Log.e("ZJSplashAd", "开屏广告加载出错$code-$msg")
}
override fun onAdLoaded(splashAd: ZJSplashAd) {
// 广告加载成功,配置交互回调
splashAd.setAdInteractionListener(this@SplashActivity)
splashAd.show(this@SplashActivity.container)
}
})
}
override fun onPause() {
super.onPause()
if (isAdClicked) {
isPaused = true
}
}
override fun onResume() {
super.onResume()
if (isPaused && isAdClosed) {
jump()
} else {
isPaused = false
}
}
//==================================================ZJSplashAdInteractionListener
/**
* 开屏点击
*/
override fun onSplashAdClick() {
isAdClicked = true
}
/**
* 关闭
*/
@Override
override fun 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处理