OpenSet Android SDK接入文档(AndroidStudio)


接入前注意事项(请先阅读注意事项再进行sdk对接)

1、SDK有两种对接方式,一种是maven,一种是arr包引入,开发者按需对接

2、SDK会依赖一些第三方库,通过maven方式对接的默认会自动依赖对应的第三方库。通过arr包对接的则需要手动引入第三方库的依赖。具体的引入方式文档会有说明。

3、如果Maven引入的第三方库和你自己项目中引入的三方库重复同时版本不同,并且想使用自己引入的版本,则自己exclude。需要注意的是所有依赖的第三方库都是必须的,可以替换版本,但不能移除。否则会造成广告无法播放,闪退等问题。

4、原则上不允许同时对接多家聚合广告,如果有需求并且两家引入的相同的第三方广告sdk造成冲突的,请联系我方技术人员。

5、原则上请使用每次官网上最新版本的AdSet SDK和适配的第三方广告SDK。并且第三方SDK版本和适配器版本必须一一匹配。如果不得已下(例如同时对接多家聚合广告并且两家最新适配的第三方广告SDK版本不一样的)需要使用跟当前AdSet SDK版本不匹配的第三方广告SDK版本。请联系我方技术人员

6、每次对接和更新应该详细查看混淆的忽略文件内容。版本更新和新增第三方广告SDK都有可能对混淆文件进行调整。

7、suppor和androidx的对接会有所区别,对接时请注意。

8、快手有ad版本和ct版本的sdk,如果只需要广告,则引入ad版本即可,ad版本更新会更快,并且包更小。如果需要使用短视频短剧等功能,再引入ct包,ct包包含短视频短剧以及广告,包更大,更新频率慢。ad和ct不能同时使用,只能选择一个。

9、虽然初始化以及每种广告都有设置UserId的方法,但是不管在什么广告类型设置,不管在代码中任务位置设置,都是全局生效的,即在banner中设置了userid,在激励广告中也是同一个userid,除非再设置一次进行重置,所以对于需要服务端回调并且回调中带有场景值等透传信息的,在播放对应广告前应该先调用setUserId设置一下userid,并且在这次广告看完之前不允许再设置新的userid。

10、startLoad方法可以预加载广告放在首页调用。但用户今日没有看广告的需求则不建议调用。startload只是预加载,最终播放广告还需要调用showAd方法

11、除了开屏广告,其他的广告类型都有startLoad方法对广告进行预加载。全局只需要调用一次即可。没有状态回调。

12、所有广告必须在主线程调用

SDK接入配置

方法一:maven接入(推荐)

1、在项目根目录的build.gradle文件中引入 adset、荣耀和gromore仓库

buildscript {
    repositories {
       .
       .
       .
        // GroMore
        maven { url "https://artifact.bytedance.com/repository/Volcengine/" }
        maven { url "https://artifact.bytedance.com/repository/pangle" }
//        荣耀
        maven { url 'https://developer.hihonor.com/repo' }
//        adset
        maven {
            allowInsecureProtocol = true
            url "http://maven.shenshiads.com/nexus/repository/adset/"
        }
    }
}

allprojects {
    repositories {
        // GroMore
        maven { url "https://artifact.bytedance.com/repository/Volcengine/" }
        maven { url "https://artifact.bytedance.com/repository/pangle" }
//        荣耀
        maven { url 'https://developer.hihonor.com/repo' }
//        adset
        maven {
            allowInsecureProtocol = true
            url "http://maven.shenshiads.com/nexus/repository/adset/"
        }
    }
}

2、在module的build.gradle中引入sdk和第三方ADN

android {
    ...
    defaultConfig {
        ...
        multiDexEnabled true
    }
}
dependencies {
    //基础包
    implementation 'com.shenshi:ad-openset-sdk:6.4.0.6'
    
    //tanx
    implementation 'com.shenshi:ad-tanx-adapter:3.5.4.1'
    
    //bz
    implementation 'com.shenshi:ad-beizi-adapter:4.90.4.11.2'
    
    //gdt
    implementation 'com.shenshi:ad-guangdiantong-adapter:4.580.1450.1'
    
    //ks-ad 只对接广告请使用
    implementation 'com.shenshi:ad-kuaishou-ad-adapter:3.3.65.3'
    
    //ks-ct 广告、短视频和短剧请使用
    implementation 'com.shenshi:ad-kuaishou-ct-adapter:3.3.63.5'
    
    //sigmob
    implementation 'com.shenshi:ad-sigmob-adapter:4.17.1.2'
    
    //gromore
    implementation 'com.shenshi:ad-gromore-adapter:6.1.2.5.1'
    
    //bd
    implementation 'com.shenshi:ad-baidu-adapter:9.352.2'
    
    //hl
    implementation 'com.shenshi:ad-hailiang-adapter:3.465.10.431.2'
    
    //zy
    implementation 'com.shenshi:ad-zhangyu-adapter:1.6.0.2.2'
    
    //multidex 64K问题,如果已添加请忽略
    implementation 'com.android.support:multidex:1.0.3'
    
    //微信小程序广告预算相关,引入可提升ecpm。强烈建议引入
    /**
     * 1,进入微信开放平台创建移动应用;
     * 2,应用创建完成后,获取到相应的微信ApplD;
     * 3.在移动端嵌入最新版OpenSDK,并确认版本为5.3.1及以上;
     * 4.在优量汇开发者平台,将微信开放平台填写的AppID与当前应用进行关联;
     * 第四步联系我们运营帮你们配置
     */
    implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.28'
    
}

方式二:arr引入

1、官网下载SDK包后解压,将adapter文件夹和adn文件夹内容以及外面的oaid包全部复制到项目的libs文件夹中,如果没有libs文件夹,则自己在modlue下创建一个,adn中ks-ad和ks-ct只能使用一个。

注意,这里adn文件夹中缺少tanx的包,是因为tanx只支持maven引入,没有离线的arr包。所以需要在gradle中单独引入,下面会说明

2、在项目的根目录引入以下内容

buildscript {
    repositories {
       .
       .
       .
        // GroMore
        maven { url "https://artifact.bytedance.com/repository/Volcengine/" }
        maven { url "https://artifact.bytedance.com/repository/pangle" }
//        荣耀
        maven { url 'https://developer.hihonor.com/repo' }
    }
}

allprojects {
    repositories {
        // GroMore
        maven { url "https://artifact.bytedance.com/repository/Volcengine/" }
        maven { url "https://artifact.bytedance.com/repository/pangle" }
//        荣耀
        maven { url 'https://developer.hihonor.com/repo' }
    }
}

3、在module的build文件中引入以下内容

android {
    ...
    defaultConfig {
        ...
        multiDexEnabled true
    }
}
dependencies {
    //adn+adapter
    implementation fileTree("libs")
    
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.squareup.okhttp3:okhttp:4.8.1'
    implementation 'io.github.aliyun-sls:aliyun-log-android-sdk:2.7.0'
    implementation 'com.hihonor.mcs:ads-identifier:1.0.2.301'
    implementation("com.tanx:TanxUISDK:3.4.5") {
        exclude group: 'com.squareup.okhttp3'
    }
    
    //multidex 64K问题,如果已添加请忽略
    implementation 'com.android.support:multidex:1.0.3'
    
    //微信小程序广告预算相关,引入可提升ecpm。强烈建议引入
    /**
     * 1,进入微信开放平台创建移动应用;
     * 2,应用创建完成后,获取到相应的微信ApplD;
     * 3.在移动端嵌入最新版OpenSDK,并确认版本为5.3.1及以上;
     * 4.在优量汇开发者平台,将微信开放平台填写的AppID与当前应用进行关联;
     * 第四步联系我们运营帮你们配置
     */
    implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.28'
    
}

权限和配置

1、将解压后的xml文件夹复制到res文件夹下面

2、打开AndroidManifest.xml文件,将以下内容复制到指定的位置

<manifest ...>
    ...
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    
    <application
    ...
        android:networkSecurityConfig="@xml/network_security_config"
        tools:replace="android:allowBackup"
    >
    ...
    
      <!--GroMore-->
        <provider
            android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
            android:authorities="${applicationId}.TTMultiProvider"
            android:exported="false" />
        <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/filepaths" />
        </provider>

        <!--广点通-->
        <!-- 声明SDK所需要的组件 -->
        <!--配置provider-->
        <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/filepaths" />
        </provider>
        
        <!--注意,sigmob的配置只有在support环境下需要配置,Androidx环境可以忽略,不需要配置-->
        <!--sigmob-->
        <provider
            android:name="com.sigmob.sdk.SigmobFileV4Provider"
            android:authorities="${applicationId}.sigprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/sigmob_provider_paths" />
        </provider>
    
    </application>
    
</manifest>

混淆配置

#-------------- AdSet start-------------
-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
#-------------- AdSet end-------------


#-------------- gromoe start-------------
-keep class com.bytedance.sdk.openadsdk.** { *; }
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.ss.**{*;}
-dontwarn com.ss.**

-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 com.bykv.**{*;}
#-keep class com.byted.live.lite.**{*;}
#-keep class com.bytedance.**{*;}
#-keep class com.pandora.common.**{*;}
#-keep class com.ss.**{*;}
#-------------- gromoe end -------------


#-------------- 快手 start-------------
-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.**
#-------------- 快手 end-------------


#-------------- sigmob start-------------
-dontoptimize

-keep class sun.misc.Unsafe { *; }
-keep class com.sigmob.**.**{*;}
-keep interface com.sigmob.**.**{*;}
-keep class com.czhj.**{*;}
-keep interface com.czhj.**{*;}

# androidx
-keep class com.google.android.material.** {*;}
-keep class androidx.** {*;}
-keep public class * extends androidx.**
-keep interface androidx.** {*;}
-dontwarn com.google.android.material.**
-dontnote com.google.android.material.**
-dontwarn androidx.**

# android.support.v4
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
#-------------- sigmob end-------------


#-------------- oaid start-------------
# 注意不同版本混淆不一样,如果你接入的是sdk默认的1.0.25版本就用下面的,其他版本自行检查
-keep class com.bun.supplier.** {*;}
-dontwarn com.bun.supplier.core.**
-keep class XI.**{*;}
-keep class com.bun.miitmdid.**{*;}

-keep class com.asus.msa.**{*;}
-keep class com.bun.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.netease.nis.sdkwrapper.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class com.zui.**{*;}
-keep class XI.**{*;}
#-------------- oaid end-------------


#-------------- 广点通 start-------------
-keep class com.qq.e.** {*;}
-dontwarn com.qq.e.**
#-------------- 广点通 end-------------


#-------------- 百度 start-------------
-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.** {*;}
#-------------- 百度 end-------------


#-------------- okhttp3 start-------------
# OkHttp3
# https://github.com/square/okhttp
# okhttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.* { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**

# okhttp 3
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**

-keepattributes InnerClasses

# Okio
-dontwarn com.squareup.**
-dontwarn okio.**
-keep public class org.codehaus.* { *; }
-keep public class java.nio.* { *; }
#----------okhttp end--------------


#----------log start--------------
-keep class com.aliyun.sls.android.producer.** { *; }
-keep interface com.aliyun.sls.android.producer.* { *; }
#----------log end--------------


#----------倍孜 start--------------
-dontwarn com.beizi.fusion.**
-dontwarn com.beizi.ad.**
-keep class com.beizi.fusion.** {*; }
-keep class com.beizi.ad.** {*; }

-keep class com.qq.e.** {
    public protected *;
}

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-dontwarn  org.apache.**
#----------倍孜 end--------------


#----------Glide start--------------
-dontwarn com.bumptech.glide.**
-keep class com.bumptech.glide.**{*;}
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}
#----------Glide end--------------


#----------阿里TanxAd start--------------
-dontwarn com.alibaba.fastjson.**

-keep class com.alibaba.fastjson.**{*;}
-keep class com.bumptech.glide.**{*;}

-keep class com.alimm.tanx.**{*;}

# 有进程间通信,保证service相关不被混淆
#-keep public class * extends android.app.Service
#-keep public class * extends android.content.BroadcastReceiver

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

#----------华为荣耀 start--------------
-keep class com.hihonor.ads.** {*; }
#----------华为荣耀 end--------------

#-------------- 章鱼 start-------------
-dontwarn com.octopus.ad.**
-keep class com.octopus.ad.** {*;}
#-------------- 章鱼 end-------------


测试id

appkeyE6097975B89E83D6
开屏广告位id7D5239D8D88EBF9B6D317912EDAC6439
插屏广告位id1D273967F51868AF2C4E080D496D06D0
banner广告位id107EB50EDFE65EA3306C8318FD57D0B3
激励视频广告位id09A177D681D6FB81241C3DCE963DCB46
全屏视频广告位idD879C3DED01D5CE319CD2751474BA8E4
信息流(原生)广告位id89FEEA66F9228ED3F6420294B89A902B
draw视频流广告位id7D5239D8D88EBF9B6D317912EDAC6439
短视频内容模块idC5F4F13C421B10664D9D21EDB52C8C5D
双排短视频内容模块id77C8E2D8F5C1D88CBF0D118F7F1FC50B
横屏长视频内容模块idE144B8229BC47DF6A8FBBBB21074F9F2
短剧视频内容模块idC80DDB16A8F5D77B7EE1012C984C84DE
短剧视频内容模块2idC4AD0620230B028DCB87D0B304651C5A
信息流内容模块id4EC4251D616C69030A161A930A938596
信息流内容模块2idEBE266AAE65F52C37A28BF2D586132EB
悬浮窗模块idC20D0FDCA88E06E6718A33279AAD2B4D

初始化SDK

	public class MyApplication extends Application {
	  	@Override
	    protected void attachBaseContext(Context base) {
	        super.attachBaseContext(base);
	        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
	            Log.e("aaaaaa", "进程名:" + getProcessName());
				// 安卓9.0后不允许多进程使用同一个数据目录
	            try {
	                WebView.setDataDirectorySuffix(getProcessName());
	            } catch (Exception e) {
	                e.printStackTrace();
	            }
	        }
	    }

	    @Override
	    public void onCreate() {
	        super.onCreate();
            // userId传你们的用户Id,有就传没有就不传,用于根据用户反馈问题,查问题用的
            OSETSDK.getInstance().setUserId("aaaa");  
	       	OSETSDK.getInstance().init(Application, APPKEY, OSETInitListener);
	    }
	}
OSETSDK初始化
setUserId(String var1)设置用户id(对接的app的用户唯一id,没有可不传)
getVersionCode()获取AdSet SDK 版本号
getVersionName()获取AdSet SDK 版本名
init(Application var1, String var2,OSETInitListener var3)SDK初始化 (var1:Application、var2:AppKey、var3:回调监听)
OSETInitListener初始化结果状态回调接口
onError(String var1)初始化失败 (var1:失败信息)
onSuccess()初始化成功

广告模块

开屏广告

xml文件添加

	<!--不可设置visibility=gone-->
	 <FrameLayout
	    android:id="@+id/fl"
	    android:layout_width="match_parent"
	    android:layout_height="match_parent"></FrameLayout>

java代码

	layout = findViewById(R.id.fl);
	OSETSplash.getInstance()
        .setUserId(Common.USER_ID)
        .show(Activity, fl, 广告位id,OSETFullScreenListener)
OSETSplash开屏广告
show(Activity var1,ViewGroup var2,String var3, OSETSplashListener var4)播放开屏广告(var1:Activity, var2:开屏广告容器,var3 开屏广告位id,var4 开屏广告状态监听)
OSETSplashListener开屏广告状态监听
onShow广告曝光哦
onError(String var1,String var2)广告加载/曝光失败(var1:错误码,var2:错误信息)
onClick广告点击
onClose广告关闭

banner广告

java代码

	OSETBanner.getInstance()
                .setUserId(Common.USER_ID)
                .setPosId(Common.POS_ID_Banner)
                .loadAd(this, osetBannerListener);
OSETBannerBanner广告
setUserId(String var1)设置用户唯一id
setContext(Activity var1)设置Activity
setPosId(String var1)设置banner广告位
startLoad()广告预加载,全局调用一次即可
loadAd(Activity var1, OSETBannerListener var2)加载Banner广告(var1:Activity, var2:Banner广告回调监听)
OSETBannerListenerBanner广告回调监听
onShow(View var1)广告曝光(var1:广告view)
onClose(View var1)广告关闭(var1:广告view)
onClick(View var1)广告点击(var1:广告view)
onLoad(View var1)广告加载成功(var1:广告view)
onError(String var1, String var2)广告点击(var1:错误码, var2:错误信息)

插屏广告

播放广告

	 OSETInterstitial
	    .getInstance()
	    .setUserId(Common.USER_ID)
	    .setPosId(Common.POS_ID_INTERSTITIAL)
	    .showAd(Activity,OSETInterstitialListener);
                
OSETInterstitial插屏广告
setUserId(String var1)设置用户唯一id
setContext(Activity var1)设置Activity
setPosId(String var1)设置插屏广告位
startLoad()广告预加载,全局调用一次即可
showAd(Activity var1,OSETInterstitialListener var2)播放插屏广告(var1 Activity, var2 广告回调监听)
OSETInterstitialListener插屏广告回调监听
onShow()广告曝光
onClick()广告点击
onClose()广告关闭
onError(String var1,String var2)广告加载/播放失败(var1:错误码, var2:错误信息)

插屏横屏广告

缓存广告

	//在首页中OnCreate调用以下代码可以开始加载广告并缓存
	 OSETInterstitialHorizontal.getInstance()
                .setContext(this)
                .setUserId(Common.USER_ID)
                .setPosId(Common.POS_ID_INTERSTITIAL_HORIZONTAL)
                .showAd(Activity,OSETInterstitialListener);

OSETInterstitialHorizontal插屏横屏广告
setUserId(String var1)设置用户唯一id
setContext(Activity var1)设置Activity
setPosId(String var1)设置插屏广告位
startLoad()广告预加载,全局调用一次即可
showAd(Activity var1,OSETInterstitialListener var2)播放横屏插屏广告(var1 Activity, var2 广告回调监听)
OSETInterstitialListener插屏横屏广告回调监听
onShow()广告曝光
onClick()广告点击
onClose()广告关闭
onError(String var1,String var2)广告加载/播放失败(var1:错误码, var2:错误信息)

全屏视频广告

缓存广告

    OSETFullVideo.getInstance()
                .setContext(this)
                .setUserId(Common.USER_ID)
                .setPosId(Common.POS_ID_FULL_VIDEO)
                .showAd(Activity,OSETFullVideoListener);
OSETFullVideo全屏广告
setUserId(String var1)设置用户唯一id
setContext(Activity var1)设置Activity
setPosId(String var1)设置插屏广告位
startLoad()广告预加载,全局调用一次即可
showAd(Activity var1,OSETInterstitialListener var2)播放全屏广告(var1 Activity, var2 广告回调监听)
OSETFullVideoListener全屏广告回调监听
onShow()广告曝光
onVideoStart()视频开始播放
onClick()广告点击
onVideoEnd()视频播放结束
onClose()广告关闭
onError(String var1,String var2)广告加载/播放失败(var1:错误码, var2:错误信息)

激励视频广告

缓存广告

	    OSETRewardVideo.getInstance()
                .setContext(this)
                .setUserId(Common.USER_ID)
                .setPosId(Common.POS_ID_REWARD_VIDEO)
                .showAd(Activity,OSETRewardListener);
                
OSETRewardVideo激励广告
setUserId(String var1)设置用户唯一id
setContext(Activity var1)设置Activity
setPosId(String var1)设置插屏广告位
startLoad()广告预加载,全局调用一次即可
showAd(Activity var1,OSETRewardListener var2)播放激励广告(var1:Activity, var2:广告回调监听)
OSETRewardListener激励广告回调监听
onShow(String var1)广告曝光(广告唯一id)
onVideoStart(String var1)视频开始播放
onClick()广告点击
onReward(String var1,int var2)广告关闭(广告唯一id)
onVideoEnd(String var1)视频播放结束
onClose(String var1)广告关闭(广告唯一id)
onError(String var1,String var2)广告加载/播放失败(var1:错误码, var2:错误信息)

原生广告

java代码

	 OSETNative.getInstance()
                .setContext(this)
                .setUserId(Common.USER_ID)
                .setPosId(Common.POS_ID_FULL_VIDEO)
                .loadAd(Activity,OSETNativeListener);
	
OSETNative模板信息流广告
setUserId(String var1)设置用户唯一id
setContext(Activity var1)设置Activity
setPosId(String var1)设置插屏广告位
startLoad()广告预加载,全局调用一次即可
loadAd(Activity var1,OSETNativeListener var2)加载原生广告(var1:Activity, var2:广告回调监听)
OSETNativeListener模板信息流广告回调监听
onShow(View var1)广告曝光(广告view)
onRenderFail(View var1)广告渲染失败
onRenderSuccess(View var1)广告渲染成功(广告view)
onClick(View var1)广告点击(广告view)
onLoad(View var1)广告加载成功(广告view)
onClose(View var1)广告关闭(广告view)
onError(String var1,String var2)广告加载/播放失败(var1:错误码, var2:错误信息)

原生自渲染广告

请参考demo中native_view_layout文件的控价类型,控件类型不能更改

       NativeViewConfig nativeViewConfig = new NativeViewConfig.Builder()
                .setLayoutId(R.layout.native_view_layout) //布局文件
                .setTitleId(R.id.tv_title) //标题
                .setAdSourceId(R.id.tv_ad_source) //广告来源
                .setAdSourceImgId(R.id.iv_ad_source_img) 广告来源图标
                .setContentId(R.id.tv_content) // 广告内容
                .setActBtnId(R.id.btn_action) //广告事件按钮
                .setCloseImgId(R.id.iv_close) //广告关闭按钮图片
                .setAppNameId(R.id.tv_app_name) //下载类广告 app名字
                .setAppAuthorNameId(R.id.tv_app_auother) //下载类广告 app作者
                .setAppVersionId(R.id.tv_app_version) //下载类广告 app版本
                .setAppPermissionId(R.id.tv_app_permission) //下载类广告 app权限跳转按钮
                .setAppPrivacyId(R.id.tv_app_privacy) //下载类广告 app隐私跳转按钮
                .setAppFunctionId(R.id.tv_app_function) //下载类广告 app功能跳转按钮
                .setAdIconId(R.id.iv_icon) //广告图标
                .setAdImgId(R.id.iv_img) //图片类广告容器
                .setAdVideoId(R.id.fl_video) //视频类广告容器
                .builder();
                
	 OSETNativeView.getInstance()
                .setContext(this)
                .setUserId(Common.USER_ID)
                .setPosId(Common.POS_ID_FULL_VIDEO)
                .setNativeViewConfig(nativeViewConfig)
                .loadAd(Activity,OSETNativeViewListener);
Col1Col2
NativeViewConfig广告UI配置
setLayoutId布局文件
setTitleId标题
setAdSourceId广告来源
setAdSourceImgId广告来源图标
setContentId广告内容
setActBtnId广告事件按钮
setCloseImgId广告关闭按钮图片
setAppNameId下载类广告 app名字
setAppAuthorNameId下载类广告 app作者
setAppVersionId下载类广告 app版本
setAppPermissionId下载类广告 app权限跳转按钮
setAppPrivacyId下载类广告 app隐私跳转按钮
setAppFunctionId下载类广告 app功能跳转按钮
setAdIconId广告图标
setAdImgId图片类广告容器
setAdVideoId视频类广告容器
OSETNativeView自渲染信息流广告
setUserId(String var1)设置用户唯一id
setContext(Activity var1)设置Activity
setPosId(String var1)设置插屏广告位
setNativeViewConfig(NativeViewConfig var1)设置自渲染UI配置
startLoad()广告预加载,全局调用一次即可
loadAd(Activity var1,OSETNativeViewListener var2)加载原生广告(var1:Activity, var2:广告回调监听)
OSETNativeViewListener自渲染信息流广告回调监听
onShow(View var1)广告曝光(广告view)
onRenderFail(View var1)广告渲染失败
onRenderSuccess(View var1)广告渲染成功(广告view)
onClick(View var1)广告点击(广告view)
onLoad(View var1)广告加载成功(广告view)
onClose(View var1)广告关闭(广告view)
onError(String var1,String var2)广告加载/播放失败(var1:错误码, var2:错误信息)

Draw信息流广告

java代码

    OSETDrawNative.getInstance()
                .setContext(this)
                .setUserId(Common.USER_ID)
                .setPosId(Common.POS_ID_DRAW_NATIVE)
                .loadAd(Activity,OSETDrawNativeListener);
OSETDrawNativeListenerdraw信息流广告回调监听
onClicked(View var1)广告点击
onLoad(View var)广告加载成功
onShow(View var)广告曝光成功
onVideoAdComplete(View view)视频播放完成
onVideoAdContinuePlay(View view)视频恢复播放
onVideoAdPaused(View view)视频暂停播放
onVideoAdStartPlay(View view)视频开始播放
onError(String var1, String var2)视频播放错误(var1:错误码,var2:错误信息)

H5广告

使用方法

1、本质上H5广告加载的仍是安卓SDK的广告,demo中只是提供了一个安卓桥接H5打开广告页面的方案(具体详见 AdH5Activity 页面) 2、在安卓代码中,打开广告的方法参考不同的广告类型加载即可,如激励广告、插屏广告、全屏视频广告的加载方法

桥接方法参考

WebView mWebView = findViewById(R.id.webView);
// 加载广告的h5页面,也可以是网络地址
mWebView.loadUrl("file:///android_asset/ad_h5.html");
mWebView.getSettings().setJavaScriptEnabled(true);
// 添加JS与安卓的通信桥梁,必须要设置:webSettings.setJavaScriptEnabled(true)
mWebView.addJavascriptInterface(this, "adSetSdkJSInterface");


/**
 * H5加载激励广告,安卓提供调用的方法
 * 在H5中调用 window.adSetSdkJSInterface.showRewardAd(adId)
 */
@JavascriptInterface
public void showRewardAd(String adId) {
    OSETRewardVideoCache.getInstance()
    .setPosId(adId)
    .setOSETVideoListener(new OSETVideoListener())
    .showAd(activity);
}

/**
 * H5加载插屏广告,安卓提供调用的方法
 * 在H5中调用 window.adSetSdkJSInterface.showInsertAd(adId)
 */
@JavascriptInterface
public void showInsertAd(String adId) {
    OSETInsertCache.getInstance()
    .setPosId(adId)
    .setOSETListener(new OSETListener())
    .showAd(activity);
}

/**
 * H5加载全屏视频广告,安卓提供调用的方法
 * 在H5中调用 window.adSetSdkJSInterface.showFullVideoAd(adId)
 */
@JavascriptInterface
public void showFullVideoAd(String adId) {
    OSETFullVideo.getInstance()
    .setPosId(adId)
    .setOSETVideoListener(new OSETVideoListener())
    .showAd(activity);
}

短视频短剧内容插件

1、打开Activity播放短视频,只支持普通短视频。其他类型(例如双排短视频、短剧等)不支持

 VideoContentConfig videoContentConfig = new VideoContentConfig.Builder()
                .setRewardDownTime(30) // 单次奖励的倒计时时间,单位s,根据业务需求设定,不用可不设置
                .setRewardCount(2)  // 总计可奖励次数,不用可不设置
                .setNeedBack(true)  // 设置需要返回键,默认false,不用可不设置
                .build();
                
OSETVideoContent
    .getInstance()
    .setPosId(Common.POS_ID_VIDEO_CONTENT)
    .showByActivity(this, videoContentConfig, new OSETVideoContentTaskListener())
VideoContentConfig短视频内容配置
setRewardDownTime单词奖励需要浏览的时间,单位s,根据业务需求设定,不用可不设置
setRewardCount奖励次数2
setNeedBack是否需要返回按钮
OSETVideoContent视频内容
setPosId视频内容id
showByActivity
(Activity var1,VideoContentConfig var2,OSETVideoContentTaskListener var3)
跳转Activity播放短视频(var1:Activity, var2:短视频配置, var3:短视频播放状态回调)

2、获取短视频/短剧fragment开发者自己渲染

    //短视频
    OSETVideoContent.getInstance()
        .setPosId(Common.POS_ID_VIDEO_CONTENT)
        .loadRecommend(new OSETVideoContentListener())
        
    //双排短视频      
    OSETVideoContent.getInstance()
        .setPosId(Common.POS_ID_VIDEO_CONTENT_FEED)
        .loadPopular(new OSETVideoContentListener())
        
    //长视频      
    OSETVideoContent.getInstance()
        .setPosId(Common.POS_ID_VIDEO_HORIZONTAL_FEED)
        .loadDiscover(new OSETVideoContentListener())
        
    //短剧      
    OSETVideoContent.getInstance()
        .setPosId(Common.POS_ID_VIDEO_HORIZONTAL_FEED)
        .loadTuBe(new OSETVideoTuBeListener())
        
    //重写onBackPressed()方法
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        if (videoContentResult != null) {
            if (videoContentResult.onBackPress()) {
                return;
            }
        }
        super.onBackPressed();
    }
OSETVideoContent视频内容
setPosId视频内容id
loadRecommend短视频
loadPopular双排短视频
loadDiscover长视频
loadTuBe短剧
OSETVideoContentListener视频内容回调
onLoadFail(String var1,String var2)加载失败(var1:错误码,var2:错误信息)
onLoadSuccess(VideoContentResult var1)加载成功(var1:视频内容对象)
onVideoStart(int var1, boolean var2, String var3)广告播放(var1:视频索引, var2:是否是广告, var3 视频唯一id)
onVideoPause(int var1, boolean var2, String var3)页面pause(var1:视频索引, var2:是否是广告, var3 视频唯一id)
onVideoResume(int var1, boolean var2, String var3)页面reseume(var1:视频索引, var2:是否是广告, var3 视频唯一id)
onVideoComplete(int var1, boolean var2, String var3)视频播放完成(var1:视频索引, var2:是否是广告, var3 视频唯一id)
onVideoPlayError(int var1, boolean var2, String var3, String var4, String var5)视频播放错误(var1:视频索引, var2:是否是广告, var3 视频唯一id,var4:错误码,var5:错误信息)
OSETVideoTuBeListener短剧回调
onLoadFail(String var1, String var2)加载失败(var1:错误码,var2:错误信息)
onLoadSuccess(VideoContentResult var)加载成功(var:视频内容对象)
unlockFail(String var1, String var2)解锁失败(var1:错误码, var2:错误信息)
unlockSuccess()解锁成功()
VideoContentResult视频内容/短剧加载结果
getFragment()获取短剧/视频内容Fragment
onBackPress()返回处理

资讯内容

1. activity模式加载

    //传入插屏广告位id
	OSETNews.getInstance().setInsertId(Common.POS_ID_Insert);
    //传入Banner广告位id
	OSETNews.getInstance().setBannerId(Common.POS_ID_Banner);
	//num表示每隔多少条信息出一个广告(5<num<10)
    //time表示倒计时的时间(传0则不需要倒计时功能,也就没有验证的功能)
	OSETNews.getInstance().showNews(activity, 信息流模块id, time,num,OSETNewsListener);

2. fragment模式加载

	OSETNews.getInstance().setInsertId(Common.POS_ID_Insert);
    OSETNews.getInstance().setBannerId(Common.POS_ID_Banner);
	//num表示每隔多少条信息出一个广告(5<num<10)
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.fl, OSETNews.getInstance()
            .getNewsFragment(activity, 信息流模块id,视频内容id(可传"", num))
            .commit();

幸运大抽奖

	OSETDial.getInstance().show(activity, "大奖的描述", int(大奖的概率:0100), "小奖的描述", 
                        banner广告位id, 插屏广告位id, 激励视频广告位id, int(免费摇奖次数), 
                        int(每天最多摇奖次数),OSETDialListener );

星座运势

	 OSETConstellatory.getInstance().show(activity,  banner广告位id,
                        插屏广告位id, 激励视频广告位id,OSETConstellatoryListener);

老黄历

	OSETAlmanac.getInstance().showAlmanac(activity,激励视频广告位id,
                        banner广告位id, OSETVideoListener);

周公解梦

	OSETOneiromancy.getInstance().showOneiromancy(activity,激励视频广告位id,
                        banner广告位id, OSETVideoListener);

天气预报

	OSETWeather.getInstance().showWeather(activity, banner广告位id, 插屏广告位id, 
                        激励视频广告位id, OSETVideoListener);

学习天地

	new OSETStudy().showStudy(activity,  激励视频广告位id, 插屏广告位id, banner广告位id, 
                        答题数量(int), OSETVideoListener);

电费充值

	OSETElectric.getInstance().showRecharge(activity,用户id);

监听方法说明

信息流模块监听

	 new OSETNewsListener() {
        @Override
        public void onTimeOver() {
            //倒计时结束回调
        }

        @Override
        public void onClose() {
            //界面关闭回调
        }
    }

摇奖监听

	new OSETDialListener() {
        @Override
        public void onTopPrize() {
            //摇到大奖的回调
        }

        @Override
        public void onSmallAward() {
            //摇到小奖的回调
        }
    }

星座运势监听

	new OSETConstellatoryListener() {
        @Override
        public void onReward(String key) {
            //每次观看完整视频会回调此方法
			 // 验证地址 http://open-set-api.shenshiads.com/reward/check/<key>(返回数据: {"code": 0},code为0表示验证成

        }
    }
Last Updated:
Contributors: zhaochangchang, zhaochangchang@shenshiads.com, zhaochangchang