聚橙ADX SDK 文档聚橙ADX SDK 文档
首页
Android SDK
iOS SDK
Flutter SDK
H5接入
服务端API
首页
Android SDK
iOS SDK
Flutter SDK
H5接入
服务端API
  • Android SDK

    • Android SDK

Android SDK

一、SDK接入配置

1. 准备工作

  • 在【聚橙ADX】平台创建应用和广告位,审核通过后,查看相应的广告参数(应用id、广告位id)
  • 解压我们提供的sdk压缩包,把解压后的libs目录下的aar包放入项目的libs工程中,xml目录下的xml文件放入项目的xml目录

2. 集成步骤

1. 添加 SDK 必须依赖项

  dependencies {
		implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
		
		implementation 'com.squareup.okhttp3:okhttp:3.8.0'
		implementation 'com.google.code.gson:gson:2.8.0'
		// adset广告源
		implementation 'io.github.aliyun-sls:aliyun-log-android-sdk:2.7.0'
		// 众简广告源
		implementation 'com.squareup.okio:okio:3.6.0'
		implementation "org.jetbrains.kotlin:kotlin-stdlib:1.7.10"
    }

加入 AndroidX 或者 Android Support V4 依赖支持库(二选一)

  dependencies {
		 dependencies {
            //AndroidX
            implementation 'androidx.legacy:legacy-support-v4:1.0.0'
        
            //Android support v4
            implementation 'com.android.support:support-v4:23.0.+'
        }
    }

2. 配置AndroidManifest.xml

    <!--联⽹权限-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--检测当前⽹络状态是2G、3G、4G还是WiFi-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--获取设备标识IMEI。⽤于标识⽤户-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!--读写存储权限-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        tools:node="replace" />
    <!--获取MAC地址,⽤于标识⽤户-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--安装应⽤权限-->
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    <!--定位权限,不强制要求-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
	
	<application >
	<!--穿山甲-->
	<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/file_paths" />  
            </provider>  
            
              
              <!--广点通sdk-->
            <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>
	</application>

3. 混淆配置

    dontwarn com.beizi.fusion.**
	-dontwarn com.beizi.ad.**
	-keep class com.beizi.fusion.** {*; }
	-keep class com.beizi.ad.** {*; }
	
	-ignorewarnings
	-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.**{ *; }
	-dontwarn com.kwai.**
	-dontwarn com.kwad.**
	-dontwarn com.ksad.**
	-dontwarn aegon.chrome.**

	-keepattributes Signature
	-keepattributes Annotation
	-dontwarn sun.misc.**
	-keep class com.google.gson.examples.android.model.**{<fields>; }
	-keep class * implements com.google.gson.TypeAdapterFactory
	-keep class * implements com.google.gson.JsonSerializer
	-keep class * implements com.google.gson.JsonDeserializer

	-keep class com.bytedance.sdk.openadsdk.** { *; }
	-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
	-keep class com.pgl.sys.ces.** {*;}
	-keep class com.bytedance.embed_dr.** {*;}
	-keep class com.bytedance.embedapplog.** {*;}
	-keep class com.kc.openset.**{*;}
	-keep class com.od.**{*;}
	-dontwarn com.kc.openset.**
	-keep @com.qihoo.SdkProtected.OSETSDK.Keep class **{*;}
	-keep,allowobfuscation interface com.qihoo.SdkProtected.OSETSDK.Keep
	
		# 倍业混淆
	-dontwarn com.mercury.**
	-keep class com.mercury.** {*;}
	
	-dontwarn com.sigmob.**
	-keep class com.sigmob.**{ *;}
	-keep interface com.sigmob.**{ *;}

	-dontwarn com.czhj.**
	-keep class com.czhj.**{ *;}
	-keep interface com.czhj.**{ *;}
	-keep class com.tan.**{ *;}

	-dontwarn com.windmill.**
	-keep class com.windmill.**.**{*;}
	-keep interface com.windmill.**{ *;}

	-keep class com.aliyun.sls.android.producer.** { *; }
	-keep interface com.aliyun.sls.android.producer.* { *; }
	-keep class com.meishu.sdk.**{*;}
	-keep class com.baoyue.adx.** {*;}

3. 注意事项

4.0以上版本,对应的穿山甲是68版本以上,该版本要求minSdkVersion为24,即兼容的最小手机系统版本为7.0,可通过以下两种方式支持: a.修改主项目的最低版本minSdkVersion为24即可解决 b.主项目AndroidManifest.xml调整tools:overrideLibrary标签解决,如果开发者主项目清单已经有tools.overrideLibrary标签,则在已有包名后,增加csj相关库名,并以逗号隔开;如果主项目清单没有该标签,则新增该标签再添加相关库名。示例代码如下:

    //聚合开发者需在tools:overrideLibrary标签内添加以下库名:
	//com.bytedance.gromore,com.bytedance.sdk.openadsdk,com.bytedance.msdk.adapter.admob,com.bytedance.msdk.adapter.BaiduMobAds,com.bytedance.msdk.adapter.gdt,com.bytedance.msdk.adapter.ks,com.bytedance.msdk.adapter.mintegral,com.bytedance.msdk.adapter.sigmob,com.bytedance.msdk.adapter.unity,com.bytedance.msdk.adapter.xiaomi,com.bytedance.tools
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
				xmlns:tools="http://schemas.android.com/tools"
        ...
        //如开发者之前无tools:overrideLibrary,则新建
        <uses-sdk tools:overrideLibrary=" com.bytedance.gromore,com.bytedance.sdk.openadsdk,com.bytedance.msdk.adapter.admob,com.bytedance.msdk.adapter.BaiduMobAds,com.bytedance.msdk.adapter.gdt,com.bytedance.msdk.adapter.ks,com.bytedance.msdk.adapter.mintegral,com.bytedance.msdk.adapter.sigmob,com.bytedance.msdk.adapter.unity,com.bytedance.msdk.adapter.xiaomi,com.bytedance.tools"/> 
        ...

	</manifest>

二、初始化说明

1. 初始化配置

    JuChengAds juChengAds = JuChengAds.getInstance();
	 //调试模式:true开启、false关闭(默认开启)
    juChengAds.enableDebugMode(true);
	 // 初始化应用
    juChengAds.initialize(this, "应用id");
	// 以下设置在initialize初始化后调用
    //是否成年(可选参数,默认是成年用户)
    juChengAds.enableAdultContent(true);
    //是否开启个性化推荐接口(可选参数,建议开启)
    juChengAds.enablePersonalizedAdvertising(true);

三、开屏广告

1. 主要API

JuChengSplashAd

方法名方法介绍
JuChengSplashAd(Activity activity, JuChengSplashRequest adRequest, JuChengSplashListener adListener)构造方法,广告相关状态会通过 adListener 通知开发者。参数说明:activity(展示广告的 activity)、adRequest(广告请求对象)、adListener(广告状态监听器)。
loadAndShowAd(ViewGroup adContainer)请求并立即展示广告。参数说明:adContainer(展示广告的容器)。
loadAd()拉取广告,配合showAd使用,实现和loadAdAndShow相同的功能。
isAdReady()广告是否准备好,未准备好广告将无法展示。
showAd(ViewGroup adContainer)展示广告,配合loadAd使用,实现和loadAdAndShow相同的功能。
destroy()当广告关闭不再使用时,必须调用此方法释放资源

JuChengSplashRequest

方法名方法介绍
JuChengSplashRequest(String placementId, String userId, Map<String, Object> options)构造方法。参数说明:placementId(广告位Id)、userId(用户Id可选)、options(扩展参数,可传任意)。
setAppTitle(String appTitle)设置应用开屏LOGO标题,广告将半屏Window展示。
setAppDescription(String appDescription)设置应用开屏LOGO描,广告半屏Window展示。
setDisableAutoHide(boolean disableAutoHide)广告结束,广告内容是否自动隐藏。 若开屏和应用共用Activity,建议false。若开屏是单独Activity ,建议true。

JuChengSplashListener

方法名方法介绍
onSplashAdLoaded(String placementId)开屏广告成功加载。参数说明:placementId(广告位Id)。
onSplashAdLoadFailed(JuChengAdError error, String placementId)开屏广告加载失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。
onSplashAdShowed()开屏广告成功展示,媒体可在此记录曝光。
onSplashAdShowFailed(JuChengAdError error, String placementId)开屏广告曝光失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。
onSplashAdClicked()开屏广告被点击。
onSplashAdClosed()开屏广告关闭。

2. 接入代码示例

    JuChengSplashListener splashAdListener = new JuChengSplashListener() {
        @Override
        public void onSplashAdShowed() {// 开屏广告成功展示
    
        }
    
        /**
         *  开屏广告成功加载
         *  如果不是loadAndShowAd模式,则需要调用showAd()方法展示广告
         *  adContainer 开屏内容展示容器,若传null,则默认进行全屏展示
         */
        @Override
        public void onSplashAdLoaded(String placementId) {
    
        }
    
        /**
         * 开屏广告展示失败
         * JuChengAdError 开屏广告错误内容
         * placementId 广告位
         * 广告失败直接进入主页面
         */
        @Override
        public void onSplashAdLoadFailed(JuChengAdError error, String placementId) {
            jumpMainActivity();
        }
    
        @Override
        public void onSplashAdClicked() {
    
        }
    
        @Override
        public void onSplashAdClosed() {// 开屏广告关闭
            //需要判断是否能进入主页面
            jumpWhenCanClick();
        }
    };

开屏广告点击注意事项

     /**
     * 设置一个变量来控制当前开屏页面是否可以跳转,当开屏广告为普链类广告时,点击会打开一个广告落地页,此时开发者还不能打开自己的App主页。
     * 当从广告落地页返回以后,才可以跳转到开发者自己的App主页;当开屏广告是App类广告时只会下载App。
     */
    public boolean canJumpImmediately = false;
    
    private void jumpWhenCanClick() {
        if (canJumpImmediately) {
            jumpMainActivity();
        } else {
            canJumpImmediately = true;
        }
    }
    
    /**
     * 不可点击的开屏,使用该jump方法,而不是用jumpWhenCanClick
     */
    private void jumpMainActivity() {
        Intent intent = new Intent(this, MainActivity.class);
        this.startActivity(intent);
        this.finish();
    }
    
    @Override
    protected void onPause() {
        canJumpImmediately = false;
    }
    
    @Override
    protected void onResume() {
        if (canJumpImmediately) {
            jumpWhenCanClick();
        }
        canJumpImmediately = true;
    }

3. 开屏加载展示

此方式自适应广告展示大小,自带LOGO样式展示APP信息,无需开发者处理底部LOGO内容

 /**
     * PLACEMENT_ID 必填
     * USER_ID 可选
     * OPTIONS 自定义参数
     */
    JuChengSplashRequest adRequest = new JuChengSplashRequest(PLACEMENT_ID, null, null);
    JuChengSplashAd adSdkSplash = new JuChengSplashAd(activity, adRequest, splashAdListener);
	// 加载并显示
    adSdkSplash.loadAndShowAd(adContainer);

四、激励视频广告

1. 主要API

JuChengRewardAd

方法名方法介绍
JuChengRewardAd(Activity activity, JuChengRewardRequest request, JuChengRewardListener listener)构造方法。参数说明:activity(展示广告的 activity)、request(广告请求对象)、 回调监听
loadAd()广告加载。
isAdReady()广告是否准备好,未准备好广告将无法展示。
showAd(HashMap<String, String> options)展示广告。参数说明:options(广告展示时的扩展参数,可选)。
showAd(Activity targetActivity, HashMap<String, String> options)展示广告。targetActivity:指定目标Activity,参数说明:options(广告展示时的扩展参数,可选)。
destroy()销毁广告。

JuChengRewardRequest

方法名方法介绍
JuChengRewardRequest(String placementId, String userId, Map<String, Object> options)构造方法。参数说明:placementId(广告位Id)、userId(用户Id可选)、options(扩展参数,可传任意)。

JuChengRewardListener

方法名方法介绍
onRewardAdLoaded(String placementId)广告成功加载。参数说明:placementId(广告位Id)。
onRewardAdLoadFailed(final JuChengAdError error, final String placementId)广告加载失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。
onRewardAdPlayStarted()广告成功展示,媒体可在此记录曝光。
onRewardAdPlayFailed(final JuChengAdError error, final String placementId)广告播放出错。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。
onRewardAdPlayFinished()广告播放结束。
onRewardAdClicked()广告被点击。
onRewardEarned(String transId, JuChengRewardResult result)广告获取奖励。参数说明: transId(标识本次广告播放行为的唯一id)、result:奖励对象
onRewardAdClosed()广告关闭。

2. 设置监听回调


    private JuChengRewardAd juChengRewardAd;
    
    /**
     * PLACEMENT_ID 必填
     * USER_ID 可选
     * OPTIONS 自定义参数 可选
     */
    JuChengRewardRequest request = new JuChengRewardRequest(PLACEMENT_ID, USER_ID, OPTIONS);
	JuChengRewardListener listener = new JuChengRewardListener() {
        @Override
        public void onRewardAdLoaded(String placementId) {
    
        }
    
        @Override
        public void onRewardAdPlayFinished() {
    
        }
    
        @Override
        public void onRewardAdPlayStarted() {
    
        }
    
        @Override
        public void onRewardAdClicked() {
    
        }
    
        @Override
        public void onRewardEarned(String transId, JuChengRewardResult result) {
    
        }
    
        @Override
        public void onRewardAdClosed() {
    
        }
    
        /**
         * 加载广告错误回调
         * JuChengAdError 激励视频错误内容
         * placementId 广告位
         */
        @Override
        public void onRewardAdLoadFailed(final JuChengAdError error, final String placementId) {
    
        }
    
        /**
         * 播放错误回调
         * JuChengAdError 激励视频错误内容
         * placementId 广告位
         */
        @Override
        public void onRewardAdPlayFailed(final JuChengAdError error, final String placementId) {
    
        }
    
    }
    
    juChengRewardAd = new JuChengRewardAd(this, request, listener);

3. 激励视频广告加载


    /**
     *同一个reward对象不建议在广告playing中重复load
     *同一个reward对象在onVideoAdClosed中可以load下一次广告
     */
    if (juChengRewardAd != null) {
        juChengRewardAd.loadAd();
    }

4. 激励视频广告播放


    /**
     * 收到onRewardAdLoaded回调代表广告已ready
     * option 自定义参数(可选)
     */
    if (juChengRewardAd != null && juChengRewardAd.isAdReady()) {
        //广告播放,可根据需要是否传入扩展参数,不传可以传入null
        HashMap option = new HashMap();
        option.put("key1", "value1");
        juChengRewardAd.showAd(option);
    }

  • 平台默认开启预加载功能。
  • sdk内部会在广告播放中再次去请求广告。
  • 要注意当前页面全局使用同一个Reward对象。
  • 广告播放时可先判断isAdReady(),如果ready直接播放,否则可再次调用loadAd()。

    private JuChengRewardAd juChengRewardAd; //全局对象
    
    /**
     * 加载广告示例
     */
    private void loadAdDemo() {
        // 先判断全局对象是否不为null 并且 是ready状态,如果是可以直接播放,否则去重新加载
        if (juChengRewardAd != null && juChengRewardAd.isAdReady()) {
            juChengRewardAd.showAd(null);
        } else {
                // 如果对象是null,先创建对象
            if (juChengRewardAd == null) {
                JuChengRewardRequest juChengRewardRequest = new JuChengRewardRequest(PLACEMENT_ID, userId, null);
                adSdkReward = new JuChengRewardAd(MainActivity.this, MainActivity.this, juChengRewardRequest, listener);
            }
            // 加载广告
            juChengRewardAd.loadAd();
        }
    }

五、插屏广告

插屏广告支持半屏/全屏。注意: 如果聚合集成了腾讯广告,则触发展示插屏广告的Activity必须配置

   android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

1. 主要API

JuChengInterstitialAd

方法名方法介绍
JuChengInterstitialAd(Activity activity, JuChengInterstitialRequest request, JuChengInterstitialListener listener)构造方法。参数说明:activity(展示广告的 activity)、request(广告请求对象)。 listener(回调监听)
loadAd()拉取广告。
isAdReady()广告是否准备好,未准备好广告将无法展示。
showAd( HashMap<String, String> options)展示广告。参数说明:options(广告展示时的扩展参数,可选)。
showAd(Activity targetActivity, HashMap<String, String> options)展示广告。targetActivity:指定目标Activity,参数说明:options(广告展示时的扩展参数,可选)。
destroy()销毁广告。

JuChengInterstitialRequest

方法名方法介绍
JuChengInterstitialRequest(String placementId, String userId, Map<String, Object> options)构造方法。参数说明:placementId(广告位Id)、userId(用户Id可选)、options(扩展参数,可传任意)。

JuChengInterstitialListener

方法名方法介绍
onInterstitialAdLoaded(String placementId)广告成功加载。参数说明:placementId(广告位Id)。
onInterstitialAdLoadFailed(final JuChengAdError error, final String placementId)广告加载失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。
onInterstitialAdPlayStarted()广告成功展示,媒体可在此记录曝光。
onInterstitialAdPlayFailed(final JuChengAdError error, final String placementId)广告播放出错。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。
onInterstitialAdPlayFinished()广告播放结束。
onInterstitialAdClicked()广告被点击。
onInterstitialAdClosed()广告关闭。

2. 设置监听回调


    private JuChengInterstitialAd interstitialAd;
    
    /**
     * PLACEMENT_ID 必填
     * USER_ID 可选
     * OPTIONS 自定义参数 可选
     */
    JuChengInterstitialRequest request = new JuChengInterstitialRequest(PLACEMENT_ID, USER_ID, OPTIONS);
	JuChengInterstitialListener listener = new JuChengInterstitialListener() {
        @Override
        public void onInterstitialAdLoaded(String placementId) {
    
        }
    
        @Override
        public void onInterstitialAdPlayStarted() {
    
        }
    
        @Override
        public void onInterstitialAdPlayFinished() {
    
        }
    
        @Override
        public void onInterstitialAdClicked() {
    
        }
    
        @Override
        public void onInterstitialAdClosed() {
    
        }
    
        /**
         * 加载广告错误回调
         * JuChengAdError 插屏错误内容
         * placementId 广告位
         */
        @Override
        public void onInterstitialAdLoadFailed(final JuChengAdError error, final String placementId) {
    
        }
    
        /**
         * 播放错误回调
         * JuChengAdError 插屏错误内容
         * placementId 广告位
         */
        @Override
        public void onInterstitialAdPlayFailed(final JuChengAdError error, final String placementId) {
    
        }
    }
    
    interstitialAd = new JuChengInterstitialAd(this, request, listener);

3. 插屏广告加载


    /**
     *同一个interstitial对象不建议在广告playing中重复load
     *同一个interstitial对象在onClosed中可以load下一次广告
     */
    if (interstitialAd != null) {
        interstitialAd.loadAd();
    }

4. 插屏广告播放


    /**
     * 收到onInterstitialAdLoaded回调代表广告已ready
     * option 自定义参数(可选)
     */
    if (interstitialAd != null && interstitialAd.isAdReady()) {
        interstitialAd.showAd(null);
    }

  • 平台默认开启预加载功能。

  • sdk内部会在广告播放中再次去请求广告。

  • 要注意当前页面全局使用同一个JuChengInterstitialAd对象。

  • 广告播放时可先判断isAdReady(),如果ready直接播放,否则可再次调用loadAd()。


        /**
         * 加载广告示例
         */
        private void loadAdDemo() {
    		// 先判断全局对象是否不为null 并且 是ready状态,如果是可以直接播放,否则去重新加载
            if (interstitialAd != null && interstitialAd.isAdReady()) {
				interstitialAd.showAd(null);
			} else {
			 // 如果对象是null,先创建对象
				if (interstitialAd == null) {
					JuChengInterstitialRequest request = new JuChengInterstitialRequest(PLACEMENT_ID, null, null);
					interstitialAd = new JuChengInterstitialAd(MainActivity.this, request, listener);
				}
				// 加载广告
				interstitialAd.loadAd();
        	}
        }

六、信息流

1. 主要API

JuChengNativeAd

方法名方法介绍
JuChengNativeAd(Context context, JuChengNativeRequest request)构造方法。参数说明:activity(展示广告的 activity)、request(广告请求对象)。
loadNativeAd(JuChengNativeAdListener listener)请求广告。参数说明:listener(请求广告相关状态会通过 JuChengNativeAdListener 通知开发者)。
List getNativeListData()广告拉取成功后,获取广告集合。
destroy()销毁广告。

JuChengNativeRequest

方法名方法介绍
JuChengNativeRequest(String placementId, String userId, int adCount, Map options)构造方法。参数说明:placementId(广告位Id)、userId(用户Id可选)、adCount(请求广告数量,最大3)、options(扩展参数,可传任意)。

JuChengNativeAdListener

方法名方法介绍
onNativeAdLoaded(String placementId)广告成功加载。参数说明:placementId(广告位Id)。
onNativeAdLoadFailed(JuChengAdError error, String placementId)广告加载失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。

JuChengNativeData

方法名方法介绍
getAppInfo()获取下载类广告六要素信息,媒体可根据需要自行展示。
getExpressAdView()获取模版渲染的广告View
render()广告渲染方法
isExpressAd()是否为模版渲染广告
destroy()销毁广告单元对象
connectAdToView(Activity activity, JuChengNativeContainer adContainer, JuChengNativeRender adRender)自渲染具体实现方法。参数说明:activity(展示广告的 activity)、adContainer(根容器)、adRender(广告渲染实现类对象)。
setInteractionListener(NativeAdInteractionListener adInteractionListener)设置广告交互监听。参数说明:adInteractionListener(广告交互监听回调对象)。
setMediaListener(NativeADMediaListener nativeADMediaListener)设置自渲染Video监听。参数说明:nativeADMediaListener(视频播放监听回调对象)。
setDislikeInteractionCallback(Activity activity, DislikeInteractionCallback dislikeInteractionCallback)设置Dislike监听。参数说明:activity(dislike弹窗的acticity)、dislikeInteractionCallback(dislike监听回调对象)。
setDownloadListener(AppDownloadListener appDownloadListener)设置广告下载监听。参数说明:appDownloadListener(广告下载监听回调对象)。

NativeAdInteractionListener

方法名方法介绍
onNativeADExposed()广告曝光。
onNativeADError(JuChengAdError error)广告展示失败。参数说明:error(报错信息,具体可看其内部code和msg)。
onNativeADRenderSuccess(View view, float width, float height)广告渲染成功。参数说明:view(模版渲染的广告view)、width(view宽度)、height(view高度)。
onNativeADClicked()广告点击。

NativeADMediaListener

方法名方法介绍
onVideoLoad()视频加载成功。
onVideoError(JuChengAdError error)视频播放失败。参数说明:error(报错信息,具体可看其内部code和message)。
onVideoStart()视频开始播放。
onVideoPause()视频暂停播放。
onVideoResume()视频恢复播放。
onVideoCompleted()视频完成播放。

AppDownloadListener

方法名方法介绍
onIdle()下载静止状态。
onDownloadActive(long totalBytes, long currBytes, String fileName, String appName)下载活动状态。参数说明:totalBytes(下载总字节)、currBytes(当前下载字节)、fileName(下载文件名)、appName(下载App名字)。
onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName)下载暂停状态。参数说明:totalBytes(下载总字节)、currBytes(当前下载字节)、fileName(下载文件名)、appName(下载App名字)。
onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName)下载失败。参数说明:totalBytes(下载总字节)、currBytes(当前下载字节)、fileName(下载文件名)、appName(下载App名字)。
onDownloadFinished(long totalBytes, String fileName, String appName)下载结束。参数说明:totalBytes(下载总字节)、fileName(下载文件名)、appName(下载App名字)。
onInstalled(String fileName, String appName)安装完成。参数说明:fileName(安装文件名)、appName(安装App名字)。

DislikeInteractionCallback

方法名方法介绍
onShow()Dislike弹窗显示。
onSelected(int position, String value, boolean enforce)Dislike弹窗Item点击。参数说明:position(点击的位置)、value(点击的位置的文字选项)、enforce(是否关闭广告)。有穿山甲广告源时,必须在该方法里移除广告
onCancel()Dislike弹窗取消。

安卓下载应用六要素信息

由于国内监管部门要求,在安卓下载类广告中,需要给用户披露下载的应用的六要素信息。开发者可以通过getAppInfo() 方法获取。六要素信息包括

信息字段支持的广告网络
应用名称getAppName()
开发者名称getDeveloperName()
应用版本getAppVersion()
隐私协议getPrivacyUrl()
权限列表getPermissionInfoUrl()
应用功能介绍getFunctionDescUrl()

2. 信息流广告加载


    private JuChengNativeAd nativeAd;
    
    private List<JuChengNativeData> nativeAdDataList;
    
    //请求广告时可以传入期望的宽高
    Map<String, Object> options = new HashMap<>();
    options.put(JuChengConstants.AD_WIDTH, adWidth);//针对于模版广告有效、单位dp
    options.put(JuChengConstants.AD_HEIGHT, adHeight);//默认自适应高度、单位dp
    
    /**
     * PLACEMENT_ID 必填
     * USER_ID 可选
     * AD_COUNT 必填 1-3
     * OPTIONS 自定义参数 可选
     */
    JuChengNativeRequest request = new JuChengNativeRequest(PLACEMENT_ID, USER_ID, AD_COUNT, options);
    
    nativeAd = new JuChengNativeAd(this, request);
    
    nativeAd.loadNativeAd(new JuChengNativeAdListener() {
        @Override
        public void onNativeAdLoadFailed(JuChengAdError error, String placementId) {
        }
    
        @Override
        public void onNativeAdLoaded(String placementId) {
            List<JuChengNativeData> unifiedADData = nativeAd.getNativeListData();
            if (unifiedADData != null && unifiedADData.size() > 0) {
                nativeAdDataList = unifiedADData;
            }
        }
    });

3. 原生广告展示


    private ViewGroup adContainer;
    
    /**
     * 请在收到onNativeAdLoaded回调后再展示广告
     * nativeAd.getNativeListData()获取广告
     */
    List<JuChengNativeData> nativeAdDataList = nativeAd.getNativeListData();
    if (nativeAdDataList != null && nativeAdDataList.size() > 0) {
			JuChengNativeData nativeAdData = nativeAdDataList.get(0);
			//绑定广告的监听
			bindListener(nativeAdData);
            nativeAdData.render();
            View expressAdView = nativeAdData.getExpressAdView();
            //媒体最终将要展示广告的容器(这里可以直接先addView,也可以在收到onNativeADRenderSuccess回调后addView)
            if (adContainer != null) {
                adContainer.removeAllViews();
                adContainer.addView(expressAdView);
            }
        }

4. 原生广告销毁


    //原生广告单元的销毁
    if (nativeAdDataList != null && nativeAdDataList.size() > 0) {
        for (JuChengNativeData adData : nativeAdDataList) {
            if (adData != null) {
                adData.destroy();
            }
        }
    }
    //原生请求广告对象的销毁
    if (nativeAd != null) {
        nativeAd.destroy();
    }

5. 注意事项

穿山甲信息流关闭时,需要在DislikeInteractionCallback的onSelected回调方法里,主动remove掉广告,否则有些广告会无法关闭,影响收益。


    nativeAdData.setDislikeInteractionCallback(mActivity, new JuChengNativeData.DislikeInteractionCallback() {
    @Override
    public void onShow() {

    }

    @Override
    public void onSelected(int i, String s, boolean b) {
        nativeViewHolder.container.removeAllViews();
    }

    @Override
    public void onCancel() {

    }
	});

七、Banner广告

1. 主要API

JuChengBannerAd

方法名方法介绍
JuChengBannerAd(Activity activity, JuChengBannerListener JuChengBannerListener)构造方法。参数说明:activity(请求广告的 activity)。 JuChengBannerListener:回调监听。广告相关状态会通过 listener 通知开发者。
loadAd(JuChengBannerRequest request)拉取广告。参数说明:request(广告请求对象)。
showAd(ViewGroup adContainer)展示广告。参数说明:adContainer(广告显示的容器)。
showAd(ViewGroup adContainer, ViewGroup.LayoutParams layoutParams)展示广告。参数说明:adContainer(广告显示的容器)。layoutParams:布局参数

| isAdReady() | 广告是否准备好,未准备好广告将无法展示。 | | destroy() | 销毁广告。 |

JuChengBannerRequest

方法名方法介绍
JuChengBannerRequest(String placementId, String userId, Map<String, Object> options)构造方法。参数说明:placementId(广告位Id)、userId(用户Id可选)、options(扩展参数,可传任意)。

JuChengBannerListener

方法名方法介绍
onBannerAdLoaded(String placementId)广告成功加载。参数说明:placementId(广告位Id)。
onBannerAdLoadFailed(final JuChengAdError error, final String placementId)广告加载失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。
onBannerAdShowed()广告成功展示,媒体可在此记录曝光。
onBannerAdClicked()广告被点击。
onBannerAdClosed()广告关闭。
onBannerAdRefreshed()广告刷新成功。
onBannerAdRefreshFailed(final JuChengAdError error, final String placementId)广告刷新失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。

2. 设置监听回调


    private JuChengBannerAd bannerView;
    
    bannerView = new JuChengBannerAd(this, new JuChengBannerListener() {
        @Override
        public void onBannerAdLoaded(String placementId) {
    
        }
    
        @Override
        public void onBannerAdLoadFailed(final JuChengAdError error, final String placementId) {
    
        }
    
        @Override
        public void onBannerAdShowed() {
    
        }
    
        @Override
        public void onBannerAdClicked() {
    
        }
    
        //开发者可以在此回调中移除bannerView
        @Override
        public void onBannerAdClosed() {
    
        }
    
        @Override
        public void onBannerAdRefreshed() {
    
        }
    
        @Override
        public void onBannerAdRefreshFailed(final JuChengAdError error, final String placementId) {
    
        }
    }); 

3. Banner广告加载


    /**
     * PLACEMENT_ID 必填
     * USER_ID 可选
     * OPTIONS 自定义参数 可选
     */
    JuChengBannerRequest request = new JuChengBannerRequest(PLACEMENT_ID, USER_ID, OPTIONS);
    if (bannerView != null) {
        bannerView.loadAd(request);
    }

4. Banner广告展示


     /**
     * 收到onBannerAdLoaded回调代表广告已ready
     */
    if (bannerView != null && bannerView.isAdReady()) {
        //媒体最终将要展示广告的容器
        if (adContainer != null) {
           bannerView.showAd(adContainer);
        }
    }