九吨Android广告SDK接入文档

版本: v3.6.8

更新日期: 2025.3.31

开发者: 重庆市九吨科技有限公司

主要功能: 广告投放、广告监测、广告归因、广告效果优化

个人信息处理规范

获取信息名称 是否必选 用途
设备品牌、名称、型号、分辨率、屏幕宽高等基础信息 必选 根据不同分辨率、宽高,推送不同广告素材,设备型号用于广告监测归因
UA、WIFI、IP地址、Wi-Fi状态、网络信号强度 必选 保证网络服务有效性及稳定性,识别虚假设备、反作弊、广告主归因。其中,运营商信息、Wi-Fi状态还会用于广告投放
应用包名、应用名,运行中的进程信息、版本号、应用前后台状态 必选 广告投放、广告反作弊
设备标识符(如IMEI、IMSI、OAID、Android id,具体字段因软硬件版本不同而存在差异) 可选 广告投放、广告归因、广告监测、反作弊

隐私政策协议 合规使用文档

SDK下载 JDADSDK-v3.6.8.aar Demo下载

准备工作

下载Demo,Demo中包含所有必须的文件:

  1. 将demo中的广告平台的aar包(JDADSDK-v3.6.8.aar)拷入到项目的lib目录下
  2. 将demo中lib文件夹下的文件拷入项目的lib目录下(jar包和aar包必须全部拷入)
  3. 在主工程的build.gradle文件中对拷入的jar包和aar包进行集成
  4. 将xml文件夹下的xml文件bd_file_path.xml,gdt_file_path.xml,mobad_provider_path.xml,network_security_config.xml,tt_file_path.xml拷入项目对应文件夹
  5. 本接入文档包含开屏和激励视频接入说明

代码集成:

详情请在demo中查看,下面只做基础说明:

AndroidManifest文件配置

请在项目的AndroidManifest文件中加入以下代码

// 权限声明
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<!-- 在AndroidManifest文件的application节点下加入以下代码 -->
<!-- 如果已经配置usesCleartextTraffic,则不需要配置networkSecurityConfig,根据APP自身决定 -->
<uses-library
	android:name="org.apache.http.legacy"
	android:required="false" />

<provider
android:name="com.qq.e.comm.GDTFileProvider"
android:authorities="${applicationId}.gdt.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/gdt_file_path" />
</provider>

<provider
android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
android:authorities="${applicationId}.TTFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/tt_file_path" />
</provider>

<provider
android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
android:authorities="${applicationId}.TTMultiProvider"
android:exported="false" />

<activity
android:name="com.baidu.mobads.AppActivity"
android:configChanges="screenSize|keyboard|keyboardHidden|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

<provider
android:name="com.baidu.mobads.openad.BdFileProvider"
android:authorities="${packageName}.bd.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/bd_file_path" />
</provider>

创建对应xml

在res/xml目录下,分别新建xml文件bd_file_path.xml,gdt_file_path.xml,mobad_provider_path.xml,network_security_config.xml,tt_file_path.xml,kj_file_paths.xml,代码分别如下所示:
bd_file_path.xml

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-files-path name="bdpath" path="bddownload/" />
    <external-path name="bdpathsd " path="bddownload/" />
</paths>

mobad_provider_path.xml

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="mobad_file_download"
        path="MobDownload" />
    <external-files-path
        name="mobad_internal_file_download"
        path="MobDownload" />
</paths>

gdt_file_path.xml

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <!-- 这个下载路径不可以修改,必须是 GDTDOWNLOAD -->
    <external-cache-path
        name="gdt_sdk_download_path1"
        path="com_qq_e_download" />
    <cache-path
        name="gdt_sdk_download_path2"
        path="com_qq_e_download" />
</paths>

tt_file_path.xml

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path name="tt_external_root" path="." />
    <external-path name="tt_external_download" path="Download" />
    <external-files-path name="tt_external_files_download" path="Download" />
    <files-path name="tt_internal_file_download" path="Download" />
    <cache-path name="tt_internal_cache_download" path="Download" />
</paths>

network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">127.0.0.1</domain>
    </domain-config>
</network-security-config>

引用SDK

app下build.gradle配置:

implementation(name: 'JDADSDK-v3.3.7', ext: 'aar')
implementation(name: 'Baidu_MobAds_SDK_v9.29', ext: 'aar')
implementation(name: 'open_ad_sdk_5.1.7.3', ext: 'aar')
implementation(name: 'GDTSDK.unionNormal.4.530.1400', ext: 'aar')
implementation(name: 'kssdk-ad-3.3.44', ext: 'aar')

implementation 'com.google.code.gson:gson:2.8.6'

implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.6'
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.github.bumptech.glide:glide:4.8.0'

implementation(name: 'mediation_baidu_adapter_5.1.7.3', ext: 'aar')
implementation(name: 'mediation_gdt_adapter_5.1.7.3', ext: 'aar')
implementation(name: 'mediation_ks_adapter_5.1.7.3', ext: 'aar')
    

注册SDK

请在项目的Application文件中注册SDK,调用NTADSDK类的注册方法即可,SDK内部会分别对各个广告平台进行注册,示例代码如下:

// 广告sdk初始化
// isDebug:是否是debug模式,在debug模式下会打印对应日志
NTAdSDK.init(this, new NTAdConfig.Builder()
            .appName("xxxx")
            .appVersion(BuildConfig.VERSION_NAME)
            .appId("xxxx")
            .appChannel("default")
            .isDebug(true,"",0)
            .build());

加载开屏广告

SplashAdManager splashAdManager = new SplashAdManager();
splashAdManager.showSplashAd(AdConfigs.AD_SPLASH, this, rlAdContainer, tvSkip, sloganHeight, new SplashAdCallBack() {
    @Override
    public void onAdSuccess() {
        // 开屏广告展示成功
        isShow = true;
    }

    @Override
    public void onAdError(String errorMsg) {
        // 开屏广告展示失败
        Toast.makeText(SplashAdActivity.this, errorMsg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public boolean onAdClicked(String title, String url, boolean isNtAd, boolean openURLInSystemBrowser) {
        // 开屏广告点击
        // 在isNtAd为true的情况下,返回true意味着由app自己来处理点击事件,如果返回false,则意味着由NTADSDK来处理点击事件,一般建议由app来处理点击;
        // 在isNtAd为false的情况下,统一由NTADSDK来处理点击事件
        return false;
    }

    @Override
    public void onAdTick(long millisUntilFinished) {
        // 开屏广告倒计时
        tvSkip.setText(String.format("跳过 %d", Math.round(millisUntilFinished / 1000f)));
    }

    @Override
    public void onAdDismissed() {
        // 开屏广告消失
        next();
    }
});

加载激励视频

VideoAdManager videoAdManager = new VideoAdManager();
videoAdManager.showVideoAd(this, AdConfigs.AD_VIDEO, new VideoAdCallBack() {
    @Override
    public void onVideoAdSuccess() {
        // 视频广告成功
        Toast.makeText(MainActivity.this, "onVideoAdSuccess", Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onVideoAdError(String errorMsg) {
        // 视频广告失败
        Toast.makeText(MainActivity.this, "onVideoAdError",Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onVideoAdClose() {
        // 视频广告点击关闭
        Toast.makeText(MainActivity.this, "onVideoAdClose",Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onVideoAdSkip() {
        // 视频广告点击跳过
        Toast.makeText(MainActivity.this, "onVideoAdSkip",Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onVideoAdComplete() {
        // 视频广告播放结束
        Toast.makeText(MainActivity.this, "onVideoAdComplete",Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onVideoAdClicked() {
        // 视频广告点击
        Toast.makeText(MainActivity.this, "onVideoAdClicked",Toast.LENGTH_SHORT).show();
    }
});

混淆配置

-keep class com.nineton.ntadsdk.NTAdSDK{*;}
-keep class com.nineton.ntadsdk.NTAdConfig{*;}
-keep class com.nineton.ntadsdk.** {*;}
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keep class com.bytedance.sdk.openadsdk.** {*;}
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.pgl.sys.ces.* {*;}
 -keep class com.qq.e.** {
 public protected *;
}
-dontwarn com.baidu.mobads.sdk.api.**
-keepclassmembers class * extends android.app.Activity {
    public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class com.baidu.mobads.** { *; }
-keep class com.style.widget.** {*;}
-keep class com.component.** {*;}
-keep class com.baidu.ad.magic.flute.** {*;}
-keep class com.baidu.mobstat.forbes.** {*;}
-keep class org.chromium.** {*;}
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keep class com.kwai.**{ *; }
-keep class com.kwad.**{ *; }
-keepclasseswithmembernames class * {
 native <methods>;
}
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**

-keep class bykvm*.**
-keep class com.bytedance.msdk.adapter.**{ public *; }
-keep class com.bytedance.msdk.api.** {
    public *;
}
-keep class com.bytedance.msdk.base.TTBaseAd{*;}
-keep class com.bytedance.msdk.adapter.TTAbsAdLoaderAdapter{
    public *;
    protected <fields>;
}
-keep class bykvm*.** { *; }