Skip to content

接入指南

概述

本页主要介绍工程配置注册事项

隐私合规

1、为遵循《个人信息保护法》相关法规,提供关闭个性化推荐广告API。

// true-屏蔽个性化推荐广告(关闭) //false-不屏蔽个性化推荐广告(打开)默认 .disablePersonalRecommand(false)

2、 adsplus隐私政策

1.引入SDK

java
  1、添加maven仓库地址
	maven { url "https://s01.oss.sonatype.org/content/repositories/releases/" }
	maven { url "https://artifact.bytedance.com/repository/pangle" }
	maven { url 'https://maven.aliyun.com/repository/public' }
    maven { url 'https://developer.huawei.com/repo/'}
	maven { url "https://jfrog.takuad.com/artifactory/china_sdk" }
	maven { url "https://jitpack.io"}
	maven { url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_support"}
  2、build.gradle引入sdk
    implementation 'io.github.adsplusteam:AdsPlus-CN:4.2.7.5'
    implementation 'com.google.code.gson:gson:2.8.1'
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    implementation 'com.google.protobuf.nano:protobuf-javanano:3.1.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

2. 初始化SDK

注意:在 Application 的 onCreate 方法中调用初始化方法,传入ADP的 appid

单进程进行初始化,请主线程中初始化adp,参考DEMO

上线时请替换为正式的appid

java
 ADP.initialize(new ADPConfig.Builder()
                            // true-屏蔽个性化推荐广告(关闭)
                            //false-不屏蔽个性化推荐广告(打开)
                            //默认false
                            .disablePersonalRecommand(false)
                            .setDebug(true).build(),
                    "adp-app-6447554214", this, new ADP.InitCallback() {
                        @Override
                        public void onSuccess() {

                          
                        }

                        @Override
                        public void onError(AdpError error) {
                           
                        }
                    });

3. 权限说明

权限功能影响收益权重受否需要用户授权是否必需作用
READ_PHONE_STATE需要非必须权限可以读取用户的IMEI、Android ID等设备标识信息,
以实现精准广告投放和个性化广告展示。
ACCESS_FINE_LOCATION需要非必须确定用户所在的地理位置,并提供与该位置相关的广告。
这样可以更加精确地展示广告,增加广告的相关性和效果。
READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE
需要非必须读取和写入外部存储器,使用这些权限来读取和写入设备上
的缓存文件、广告素材等以提高广告展示的效率和速度。
ACCESS_NETWORK_STATE
ACCESS_WIFI_STATE
不需要非必须可以通过检查网络连接状态来确定设备当前所使用的网络类型,
如 Wi-Fi、移动数据等。这可以帮助SDK 在选择适当的广告内容和
格式时考虑到用户当前的网络环境。
QUERY_ALL_PACKAGES不需要建议增加它允许应用程序查询设备上所有安装的应用程序的信息广告
SDK收集后,以便更好地定位和投放广告,以提高广告的吸引
力和点击率

注意: 1、需要把adpslus的隐私政策增加到APP隐私政策中去。 2、国内APP不建议一次性进行所有权限的授权,应该是APP用户需要使用到某个权限时再进行授权 3、建议增加QUERY_ALL_PACKAGES READ_PHONE_STATE 权限提高广告收入,无此权限广告也能正常运行 4、权限请在AndroidManifest中进行申明

4. 修改AndroidManifest.xml文件, 添加必要权限

a、添加访问权限

在AndroidManifest.xml文件中添加权限

SDK不强制校验下列权限(即:无下面权限sdk也可正常工作),但建议开发者申请下面权限,尤其是READ_PHONE_STATE权限 READ_PHONE_STATE权限用于允许SDK获取用户标识

xml
	<uses-permission android:name="android.permission.INTERNET"></uses-permission>
	<!-- 不强制要求  没有此权限收益会降低建议增加-->
	<uses-permission android:name="android.permission.READ_PHONE_STATE" />
	
    <!-- 不强制要求-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
	<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />


    <uses-permission android:name="android.permission.WAKE_LOCK" />

	<!-- 建议添加“query_all_package”权限,通过此权限在Android R系统上判定广告对应的应用是否在用户的app上安装
    ,避免投放错误的广告,以此提高用户的广告体验。若添加此权限,需要在您的用户隐私文档中声明!请参考adplus隐私政策  -->
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>



	<!--必要权限,解决安全风险漏洞,发送和注册广播事件需要调用带有传递权限的接口-->
    <permission android:name="${applicationId}.permission.KW_SDK_BROADCAST"
        android:protectionLevel="signature" />
    <uses-permission android:name="${applicationId}.permission.KW_SDK_BROADCAST" />

    <permission android:name="${applicationId}.openadsdk.permission.TT_PANGOLIN"
        android:protectionLevel="signature" />
    <uses-permission android:name="${applicationId}.openadsdk.permission.TT_PANGOLIN" />

b、配置网络权限 配置

兼容部分第三方广告SDK存在Http请求,在“AndroidManifest.xml”做以下配置。

java
<application
    ...
   兼容部分第三方广告SDK存在Http请求
    android:networkSecurityConfig="@xml/network_security_config"
    ...
        注意:如果缺少以下配置,可能导致广告图片显示不出来或者广告加载没有回调
        <uses-library android:name="org.apache.http.legacy" android:required="false"/>
            
</application>

中在项目的res/xml文件夹新增network_security_config.xml,内容如下:

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

c、开启硬件加速

java
方式一:
<application

	android:hardwareAccelerated="true"
	... ...

</application>

方式二:
<activity

	android:hardwareAccelerated="true"
	... ...

</activity>

d、添加provider 配置

在AndroidManifest.xml文件的application节点下添加

xml
	<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_paths" />
	</provider>
	<provider
		android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
		android:authorities="${applicationId}.TTMultiProvider"
		android:exported="false" />

e、多进程WebView兼容

在Application 中onCreate()中最开始的位置(必须在初始化其他第三方SDK之前进行设置)添加Webview设置的

Android 9及以上必须设置

xml
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            String processName = getProcessName(this);
            String packageName = this.getPackageName();
            if (!packageName.equals(processName)) {
                WebView.setDataDirectorySuffix(processName);
            }
 }

5. 监听开屏Activity生命周期

有些源需要打开落地页,如果打开了广告就先不进行跳转首页等从广告回来后去主页

java
SplashActivity 中示例代码
public boolean canJump = false;
 /**
    * 设置一个变量来控制当前开屏页面是否可以跳转,当开屏广告为普链类广告时,点击会打开一个广告落地页,此时开发者还不能打开自己的App主页。当从广告落地页返回以后,才可以跳转到开发者自己的App主页。
    */
private void next() {
   if (canJump) {
		//打开APP 首页
   }else{
        canJump = true;
   }
}
    
@Override
protected void onPause() {
    super.onPause();
    canJump = false;
}

@Override
protected void onResume() {
  super.onResume();
    if (canJump) {
        //去app首页
        next();
    }
    canJump = true;
}

6. 混淆

如果需要混淆,添加下面配置,详细文件请参考demo


-ignorewarnings
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
#AdsPlus
-keep class com.adp.sdk.** {*;}
#aliyun
-keep class com.aliyun.sls.android.producer.* { *; }
-keep interface com.aliyun.sls.android.producer.* { *; }




-dontwarn com.androidquery.**
-keep class com.androidquery.** { *;}

-dontwarn tv.danmaku.**
-keep class tv.danmaku.** { *;}
-dontwarn androidx.**

#tbs版本的sdk需要进行以下配置
-keep class com.tencent.smtt.** { *; }
-dontwarn dalvik.**
-dontwarn com.tencent.smtt.**
-keep class com.tencent.mm.opensdk.** {
    *;
}

-keep class com.tencent.wxop.** {
    *;
}

-keep class com.tencent.mm.sdk.** {
    *;
}

# 穿山甲
-keep class com.pgl.sys.ces.** {*;}
-keep class com.bytedance.embed_dr.** {*;}
-keep class com.bytedance.embedapplog.** {*;}
-keep class com.bytedance.sdk.openadsdk.** { *; }
-keep class com.androidquery.callback.** {*;}
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.ss.sys.ces.* {*;}
-dontwarn com.ss.android.socialbase.downloader.**
-dontwarn com.ss.android.crash.log.**



# MTG
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.mintegral.** {*; }
-keep interface com.mintegral.** {*; }
-keep class android.support.v4.** { *; }
-dontwarn com.mintegral.**
-keep class **.R$* { public static final int mintegral*; }
-keep class com.alphab.** {*; }
-keep interface com.alphab.** {*; }

# 快手
-keep class org.chromium.** {*;}
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keep class com.kwai.**{ *; }
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**
-keep class com.kwad.sdk.** { *;}
-keep class com.ksad.download.** { *;}
-keep class com.kwai.filedownloader.** { *;}

# qapm 平台
-keep class com.tencent.qapmsdk.**{*;}
-dontwarn com.tencent.qapmsdk.**
-dontnote com.tencent.qapmsdk.**

-ignorewarnings
#klevin
-keep class com.tencent.tgpa.lite.**{*;}
-keep class com.ihoc.mgpa.deviceid.**{*;}
-keep class com.tencent.klevin.**{*;}
#baidu
-dontwarn com.baidu.mobads.sdk.api.**
-keep class com.baidu.ad.magic.flute.** {*;}
-keep class com.baidu.mobstat.forbes.** {*;}
-keep class com.baidu.mobads.** { *; }

########### 移动安全联盟 OAID 混淆要求 begin ########
-keep class XI.CA.XI.**{*;}
-keep class XI.K0.XI.**{*;}
-keep class XI.XI.K0.**{*;}
-keep class XI.vs.K0.**{*;}
-keep class XI.xo.XI.XI.**{*;}
-keep class com.asus.msa.SupplementaryDID.**{*;}
-keep class com.asus.msa.sdid.**{*;}
-keep class com.bun.lib.**{*;}
-keep class com.bun.miitmdid.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class com.zui.opendeviceidlibrary.**{*;}
-keep class org.json.**{*;}
-keep public class com.netease.nis.sdkwrapper.Utils {
    public<methods>;
}
########### 移动安全联盟 OAID 混淆要求 end ########

#京东sdk混淆规则
-keep class com.jd.ad.sdk.** { *; }

#octopus混淆
-dontwarn com.octopus.ad.**
-keep class com.octopus.ad.** {*;}


-keep class com.huawei.openalliance.ad.** { *; }
-keep class com.huawei.hms.ads.** { *; }

# 自动曝光数据的防混淆
-keep class * implements java.io.Serializable{
     <fields>;
    <methods>;
}

-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.**{*;}
-keep class com.bumptech.glide.**{*;}
-keep class com.alimm.tanx.**{*;}
-keep class android.support.v7.widget.RecyclerView {*;}
-keepnames class android.support.v7.widget.RecyclerView$* {
    public <fields>;
    public <methods>;
}
-keep class android.support.v7.widget.LinearLayoutManager {*;}
-keep class android.support.v7.widget.PagerSnapHelper {*;}
-keep class android.support.v4.view.ViewCompat {*;}
-keep class android.support.v4.util.LongSparseArray {*;}
-keep class android.support.v4.util.ArraySet {*;}
-keep class android.support.v4.view.accessibility.AccessibilityNodeInfoCompat {*;}
-keep class com.yxcorp.kuaishou.addfp.android.Orange {*;}
-keep class com.ksad.**{ *; }
-keep class com.kwad.** { *;}
-keep class com.kuaishou.aegon.**{ *; }
-dontwarn com.kuaishou.aegon.**
-dontwarn com.tachikoma.core.**
-keeppackagenames com.badlogic.gdx.math
-keeppackagenames com.google.vrtoolkit.cardboard.sensors
-dontwarn okio.**
-dontwarn okhttp3.**
# 混淆一级即可
-keep class okhttp3.* {*;}
-keep class com.google.gson.* {*;}
#保留注解,如果不添加改行会导致我们的@Keep注解失效
-keep class android.support.annotation.Keep
-keep @android.support.annotation.Keep class * {*;}
# 安全sdk
-dontwarn com.kuaishou.android.security.**
-keep class com.kuaishou.android.security.**{*;}
-keep class com.yxcorp.kuaishou.addfp.** { *;}
#直播相关混淆
-dontwarn io.netty.**
-dontwarn com.kuaishou.livestream.message.**
-dontwarn com.kuaishou.protobuf.**
-keep class com.google.protobuf.nano.** {*;}
-keep class com.kuaishou.livestream.message.nano.** {*;}
-keep class com.kuaishou.protobuf.livestream.nano.** {*;}
-keep class com.kuaishou.merchant.message.nano.** {*;}
-keep class com.kuaishou.protobuf.merchant.message.nano.** {*;}
#直播广告
-keep class okio.** {*;}
-keep class io.** {*;}
-keep class com.yxcorp.** {*;}
-keep class com.kuaishou.** {*;}
-keep class org.reactivestreams.** {*;}
-keep class com.kuaishou.livestream.** {*;}
-keep class com.kuaishou.security.kste.** {*;}
-keep class com.seclib.kste.** {*;}
# 安全sdk
-dontwarn com.kuaishou.android.security.**
-keep class com.kuaishou.dfp.**{*;}
-keep class com.kuaishou.dfp.KWEGIDDFP {*;}
-keep class com.kuaishou.dfp.ResponseDfpCallback {*;}
-keep class com.kuaishou.dfp.env.jni.Watermelon {*;}
-dontwarn com.squareup.okhttp3.**
-keep class com.squareup.okhttp3.** { *;}
-dontwarn okio.**
-keep class com.google.protobuf.** {*;}
-keep class com.kuaishou.dfp.env.Proxy.** {*;}
#new added for android 10
-keep class com.bun.miitmdid.core.** {*;}

#TK框架
-keep class com.tachikoma.core.manager.IProviderCollector {*;}
-keep class * implements com.tachikoma.core.manager.IProviderCollector { *;}
-keep class com.tkruntime.v8.**{*;}
-keep class com.kwad.proguard.annotations.DoNotStrip
-keep @com.kwad.proguard.annotations.DoNotStrip class * { *; }
-keepclassmembers,includedescriptorclasses class * { native <methods>; }
#风控sdk
-keep class com.kuaishou.weapon.**{ *; }
# oaid相关
-dontwarn com.kwad.sdk.oaid.OADIDSDKHelper**
-keep class * implements com.bun.miitmdid.interfaces.IIdentifierListener { *; }
-keep class com.bun.miitmdid.core.MdidSdkHelper{*;}
-keep public class com.kwad.sdk.crash.online.monitor.block.BlockEvent { *; }
-keep class com.kwad.sdk.glide.framesequence.FrameSequence { *; }
-keep class com.kwad.sdk.glide.framesequence.FrameSequenceDrawable { *; }
-keep class com.kwad.components.offline.api.** { *;}
-keep class * implements com.kwad.components.offline.api.IOfflineCompo { *; }
-keep class com.kwad.components.offline.api.core.annotation.DoNotStrip
-keep @com.kwad.components.offline.api.core.annotation.DoNotStrip class * { *; }
-keep class com.kwad.sdk.glide.framesequence.FrameSequence { *; }
-keep class com.kwad.sdk.glide.framesequence.FrameSequenceDrawable { *; }
-keep class com.kwad.components.offline.api.** { *;}
-keep class * implements com.kwad.components.offline.api.IOfflineCompo { *; }
-keep class com.kwad.components.offline.api.core.annotation.DoNotStrip
-keep @com.kwad.components.offline.api.core.annotation.DoNotStrip class * { *; }
-keep class com.qq.e.** {
    public protected *;
}
-keep class MTT.ThirdAppInfoNew {
    *;
}
-keep class com.tencent.** {
    *;
}







如果您的资源混淆或资源缩减,您需要保留SDK的资源,名单请参考SDK包中的whitelists

注意:平台SDK包中whiteList.txt 白名单上的资源不支持混淆,上线前请发版本提供我们进行测试验证

7. 选择支持的NDK

ndk { // 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置 
   abiFilters ‘armeabi-v7a’, ‘arm64-v8a’, ‘x86’, ‘x86_64’, ‘armeabi’ 
}

注意:

java
/** 开屏页一定要禁止用户对返回按钮的控制,否则将可能导致用户手动退出了App而广告无法正常曝光和计费 */ 
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_HOME) {
        return true;    
    }    
    return super.onKeyDown(keyCode, event);  
}

请开发者务必按照上面信息进行注册声明,详情见Demo。