获取信息名称 | 是否必选 | 用途 |
---|---|---|
设备品牌、名称、型号、分辨率、屏幕宽高等基础信息 | 必选 | 根据不同分辨率、宽高,推送不同广告素材,设备型号用于广告监测归因 |
UA、WIFI、IP地址、Wi-Fi状态、网络信号强度 | 必选 | 保证网络服务有效性及稳定性,识别虚假设备、反作弊、广告主归因。其中,运营商信息、Wi-Fi状态还会用于广告投放 |
应用包名、应用名,运行中的进程信息、版本号、应用前后台状态 | 必选 | 广告投放、广告反作弊 |
设备标识符(如IMEI、IMSI、OAID、Android id,具体字段因软硬件版本不同而存在差异) | 可选 | 广告投放、广告归因、广告监测、反作弊 |
下载Demo,Demo中包含所有必须的文件:
详情请在demo中查看,下面只做基础说明:
请在项目的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>
在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>
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')
请在项目的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*.** { *; }