常见问题

常见问题

接入与编译

请使用真机测试

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%

  • 需要确认开屏广告的容器没有其他组件覆盖

  • 使用RelativeLayoutConstraintLayout时会偶现错误,建议使用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处理

目录