OpenSet Android SDK接入文档(AndroidStudio)


特别说明

从6.5.0.0版本开始,AdSet聚合SDK与自营广告(奇点广告)SDK融合,在对接上相对于旧版本做了很大的调整,如果是旧版本SDK升级,请格外注意。 如果是第一次对接SDK,则直接阅读文档对接即可。如果对接过程中有疑问的地方,可以在对接群里联系我方技术人员

接入前注意事项(请先阅读注意事项再进行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.5.0.5'
    
    //tanx
    implementation 'com.shenshi:ad-tanx-adapter:3.6.4.1'
    
    //bz
    implementation 'com.shenshi:ad-beizi-adapter:4.90.4.42.1'
    
    //gdt
    implementation 'com.shenshi:ad-guangdiantong-adapter:4.611.1481.2'
    
    //ks-ad 只对接广告请使用
    implementation 'com.shenshi:ad-kuaishou-ad-adapter:3.3.69.3'
    
    //ks-ct 广告、短视频和短剧请使用
    //implementation 'com.shenshi:ad-kuaishou-ct-adapter:3.3.69.4'
    
    //sigmob
    implementation 'com.shenshi:ad-sigmob-adapter:4.19.5.4'
    
    //gromore
    implementation 'com.shenshi:ad-gromore-adapter:6.6.0.7.1'
    
    //bd
    implementation 'com.shenshi:ad-baidu-adapter:9.371.4'
    
    //hl
    implementation 'com.shenshi:ad-hailiang-adapter:3.468.15.434.1'
    
    //zy
    implementation 'com.shenshi:ad-zhangyu-adapter:1.6.2.0.1'

    //京东 androidx环境请使用
    implementation 'com.shenshi:ad-jingdong-androidx-adapter:2.6.20.2'

    //京东 support环境请使用
    //implementation 'com.shenshi:ad-jingdong-support-adapter:2.6.20.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、在项目的根目录对应节点引入以下内容(start-end)

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

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

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.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.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <application
            ...
            android:networkSecurityConfig="@xml/network_security_config"
            tools:replace="android:allowBackup"
    >
        ...

        <!--注意,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-------------

#-------------- 京东 start-------------
-keep class com.jd.ad.sdk.** { *; }
#-------------- 京东 end-------------

隐私合规配置

接入示例

new OSETCustomController() {

    /**
     * 是否允许SDK主动使用地理位置信息
     *
     * @return true可以获取,false禁止获取。默认为true
     */
    public boolean canReadLocation() {
        return true;
    }

    /**
     * 当canReadLocation=false时,可传入地理位置信息,sdk使用您传入的地理位置信息
     *
     * @return 地理位置参数
     */
    public Location getLocation() {
        return null;
    }

    /**
     * 是否允许SDK主动使用手机硬件参数,如:imei, android_id, meid, imsi, iccid
     *
     * @return true可以使用,false禁止使用。默认为true
     */
    public boolean canUsePhoneState() {
        return true;
    }

    /**
     * 当canUsePhoneState=false时,可传入原始的imei信息,sdk使用您传入的原始imei信息。
     * 注意:请传入原始imei值,无需使用md5加密,sdk整体信息加密传输已满足合规需要
     */
    public String getImei() {
        return "";
    }

    /**
     * 当canUsePhoneState=false时,可传入android_id信息,sdk使用您传入的android_id
     */
    public String getAndroidId() {
        return "";
    }

    /**
     * 是否允许SDK主动使用oaid
     *
     * @return true可以使用,false禁止使用。默认为true
     */
    public boolean canUseOaid() {
        return true;
    }

    /**
     * 当canUseOaid=false时,可传入oaid信息,sdk使用您传入的oaid信息
     * 注意:请传入原始oaid,无需使用md5加密,sdk整体信息加密传输已满足合规需要
     */
    public String getOaid() {
        return "";
    }

    /**
     * 是否允许SDK主动使用mac_address
     *
     * @return true可以使用,false禁止使用。默认为true
     */
    public boolean canUseMacAddress() {
        return true;
    }

    /**
     * 当canUseMacAddress=false时,可传入mac地址信息,sdk使用您传入的mac地址信息
     */
    public String getMacAddress() {
        return "";
    }

    /**
     * 是否允许SDK主动使用ACCESS_NETWORK_STATE权限
     *
     * @return true可以使用,false禁止使用。默认为true
     */
    public boolean canUseNetworkState() {
        return true;
    }

    /**
     * 是否允许SDK主动使用存储权限
     *
     * @return true可以使用,false禁止使用。默认为true
     */
    public boolean canUseStoragePermission() {
        return true;
    }

    /**
     * 是否允许SDK主动读取app安装列表
     *
     * @return true可以使用,false禁止使用。默认为true
     */
    public boolean canReadInstalledPackages() {
        return true;
    }

    /**
     * 当canReadInstalledPackages=false时,可传入package list信息,sdk使用您传入的package list
     */
    public List<String> getInstalledPackages() {
        return null;
    }

    /**
     * 是否启用个性化广告开关,默认为true
     * @return true:开启,false:关闭
     */
    public boolean canUsePersonalizedAd() {
        return true;
    }

}

测试id

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

初始化SDK

接入示例 开发者需要在用户同意APP的隐私政策之后调用以下代码来初始化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();
        // setUserId传你们的用户Id,有就传没有就不传,用于根据用户反馈问题,查问题用
        OSETSDK.getInstance()
            .setUserId("aaa")
            .setCustomController(new OSETCustomController(){})
            .init(Application, APPKEY, new OSETInitListener(){});
    }
}
OSETSDK初始化
setUserId(String var1)设置用户id(对接的app的用户唯一id,没有可不传)
setCustomController()隐私合规设置
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"/>

java代码

layout = findViewById(R.id.fl);
 OSETSplash.getInstance()
        .setContext(this)
        .setPosId(Common.POS_ID_Splash)
        .loadAd(osetSplashAdLoadListener)
        
private OSETSplashAdLoadListener osetSplashAdLoadListener = OSETSplashAdLoadListener {

    void onLoadSuccess(OSETSplashAd osetSplashAd){
        osetSplashAd.showAd(Activity, FrameLayout, OSETSplashListener())
    }
    
    void onLoadFail(String errorCode, String errorMessage){
        
    }
    
}

OSETSplash开屏广告
setContext(Activity activity)设置Activity
setUserId(String userId)设置UserId。注意,这里会全局设置,设置以后对任意类型广告都生效,如果想更改,请在播放广告之前调用广告对象的setUserId方法,广告对象的setUserId只对当前设置的广告对象有效,不会影响全局设置
setPosId(String posId)设置广告位id
loadAd(OSETSplashAdLoadListener var)加载广告(var 广告加载结果监听)
startLoad()预加载广告,不会回调 OSETSplashAdLoadListener 监听,可以提前加载广告,节省首次广告加载曝光时间,但是注意,预加载广告会获取设备id等用户隐私信息,审核可能会被拒,请酌情使用
OSETSplashAdLoadListener开屏广告加载监听
onLoadSuccess(OSETSplashAd osetSplashAd)广告加载成功,osetSplashAd:广告对象
onLoadFail(String errorCode, String errorMessage)广告加载失败,errorCode:错误码,errorMessage:错误信息
OSETSplashAd开屏广告对象
setUserId(String userId)设置userId,注意:这里设置只对单个广告对象有效,并且不影响全局广告的设置。一旦广告曝光结束,这里设置的userid不再持有
getECPM()获取广告ecpm,单位:千次分:注意,只有自营奇点广告返回价格,聚合广告AdSet不返回价格
getRequestId()获取单个广告对象唯一ID
isUsable()广告是否有效,返回true:广告有效,false:广告已失效过期 。失效后的广告继续播放是没有收益的,在调用广告曝光前请先检查广告是否有效
bidSuccess(BidAdInfo bidAdInfo)广告竞胜上报,bidAdInfo:竞败的广告媒体信息
bidFail(BidAdInfo bidAdInfo)广告竞败上报,bidAdInfo:竞败的广告媒体信息
showAd(Activity, FrameLayout, OSETSplashListener)广告曝光,activity:Activity,FrameLayout:广告容器 ,OSETSplashListener:广告状态监听
destroy()对象销毁
OSETSplashListener开屏广告状态监听
onShow广告曝光
onError(String var1,String var2)广告曝光失败(var1:错误码,var2:错误信息)
onClick广告点击
onClose广告关闭

banner广告

java代码

 OSETBanner.getInstance()
        .setContext(this)
        .setPosId(Common.POS_ID_Banner)
        .loadAd(osetBannerAdLoadListener)
        
private OSETBannerAdLoadListener osetBannerAdLoadListener = OSETBannerAdLoadListener {

    void onLoadSuccess(OSETBannerAd osetBannerAd){
        osetBannerAd.render(Activity, OSETBannerListener())
    }
    
    void onLoadFail(String errorCode, String errorMessage){
        
    }
    
}
OSETBannerBanner广告
setContext(Activity activity)设置Activity
setUserId(String userId)设置UserId。注意,这里会全局设置,设置以后对任意类型广告都生效,如果想更改,请在播放广告之前调用广告对象的setUserId方法,广告对象的setUserId只对当前设置的广告对象有效,不会影响全局设置
setPosId(String posId)设置广告位id
loadAd(OSETBannerAdLoadListener var)加载广告(var 广告加载结果监听)
startLoad()预加载广告,不会回调 OSETBannerAdLoadListener 监听,可以提前加载广告,节省首次广告加载曝光时间,但是注意,预加载广告会获取设备id等用户隐私信息,审核可能会被拒,请酌情使用
OSETBannerAdLoadListenerbanner广告加载监听
onLoadSuccess(OSETBannerAd osetBannerAd)广告加载成功,osetBannerAd:广告对象
onLoadFail(String errorCode, String errorMessage)广告加载失败,errorCode:错误码,errorMessage:错误信息
OSETBannerAdbanner广告对象
setUserId(String userId)设置userId,注意:这里设置只对单个广告对象有效,并且不影响全局广告的设置。一旦广告曝光结束,这里设置的userid不再持有
getECPM()获取广告ecpm,单位:千次分:注意,只有自营奇点广告返回价格,聚合广告AdSet不返回价格
getRequestId()获取单个广告对象唯一ID
isUsable()广告是否有效,返回true:广告有效,false:广告已失效过期 。失效后的广告继续播放是没有收益的,在调用广告曝光前请先检查广告是否有效
bidSuccess(BidAdInfo bidAdInfo)广告竞胜上报,bidAdInfo:竞败的广告媒体信息
bidFail(BidAdInfo bidAdInfo)广告竞败上报,bidAdInfo:竞败的广告媒体信息
render(Activity, OSETBannerListener)广告渲染,activity:Activity ,OSETBannerListener:广告状态监听
destroy()对象销毁
OSETBannerListenerBanner广告状态监听
onShow(View view)广告曝光
onError(String var1,String var2)广告渲染/曝光失败(var1:错误码,var2:错误信息)
onClick(View view)广告点击
onClose(View view)广告关闭
onRenderSuccess(View view)渲染成功,view就是广告的控件,通过addView展示

插屏广告

 OSETInterstitial
    .getInstance()
    .setContext(this)
    .setUserId(Common.USER_ID)
    .setPosId(Common.POS_ID_INTERSTITIAL)
    .loadAd(OSETInterstitialAdLoadListener);
    
private OSETInterstitialAdLoadListener osetInterstitialAdLoadListener = OSETInterstitialAdLoadListener {

    void onLoadSuccess(OSETInterstitialAd osetInterstitialAd){
        osetInterstitialAd.showAd(Activity, OSETInterstitialListener())
    }
    
    void onLoadFail(String errorCode, String errorMessage){
        
    }

}
                
OSETInterstitial插屏广告
setContext(Activity activity)设置Activity
setUserId(String userId)设置UserId。注意,这里会全局设置,设置以后对任意类型广告都生效,如果想更改,请在播放广告之前调用广告对象的setUserId方法,广告对象的setUserId只对当前设置的广告对象有效,不会影响全局设置
setPosId(String posId)设置广告位id
loadAd(OSETInterstitialAdLoadListener var)加载广告(var 广告加载结果监听)
startLoad()预加载广告,不会回调 OSETInterstitialAdLoadListener 监听,可以提前加载广告,节省首次广告加载曝光时间,但是注意,预加载广告会获取设备id等用户隐私信息,审核可能会被拒,请酌情使用
OSETInterstitialAdLoadListener插屏广告加载监听
onLoadSuccess(OSETInterstitialAd osetInterstitialAd)广告加载成功,osetInterstitialAd:广告对象
onLoadFail(String errorCode, String errorMessage)广告加载失败,errorCode:错误码,errorMessage:错误信息
OSETInterstitialAd插屏广告对象
setUserId(String userId)设置userId,注意:这里设置只对单个广告对象有效,并且不影响全局广告的设置。一旦广告曝光结束,这里设置的userid不再持有
getECPM()获取广告ecpm,单位:千次分:注意,只有自营奇点广告返回价格,聚合广告AdSet不返回价格
getRequestId()获取单个广告对象唯一ID
isUsable()广告是否有效,返回true:广告有效,false:广告已失效过期 。失效后的广告继续播放是没有收益的,在调用广告曝光前请先检查广告是否有效
bidSuccess(BidAdInfo bidAdInfo)广告竞胜上报,bidAdInfo:竞败的广告媒体信息
bidFail(BidAdInfo bidAdInfo)广告竞败上报,bidAdInfo:竞败的广告媒体信息
showAd(Activity, OSETInterstitialListener)广告渲染,activity:Activity ,OSETInterstitialListener:广告状态监听
destroy()对象销毁
OSETInterstitialListener插屏广告状态监听
onShow()广告曝光
onError(String var1,String var2)广告曝光失败(var1:错误码,var2:错误信息)
onClick()广告点击
onClose()广告关闭

插屏横屏广告

 OSETInterstitialHorizontal
    .getInstance()
    .setContext(this)
    .setUserId(Common.USER_ID)
    .setPosId(Common.POS_ID_INTERSTITIAL_HORIZONTAL)
    .loadAd(OSETInterstitialAdLoadListener);
    
private OSETInterstitialAdLoadListener osetInterstitialAdLoadListener = OSETInterstitialAdLoadListener {

    void onLoadSuccess(OSETInterstitialAd osetInterstitialAd){
        osetInterstitialAd.showAd(Activity, OSETInterstitialListener())
    }
    
    void onLoadFail(String errorCode, String errorMessage){
        
    }

}

OSETInterstitialHorizontal插屏横屏广告
setContext(Activity activity)设置Activity
setUserId(String userId)设置UserId。注意,这里会全局设置,设置以后对任意类型广告都生效,如果想更改,请在播放广告之前调用广告对象的setUserId方法,广告对象的setUserId只对当前设置的广告对象有效,不会影响全局设置
setPosId(String posId)设置广告位id
loadAd(OSETInterstitialAdLoadListener var)加载广告(var 广告加载结果监听)
startLoad()预加载广告,不会回调 OSETInterstitialAdLoadListener 监听,可以提前加载广告,节省首次广告加载曝光时间,但是注意,预加载广告会获取设备id等用户隐私信息,审核可能会被拒,请酌情使用
OSETInterstitialAdLoadListener插屏横屏广告加载监听
onLoadSuccess(OSETInterstitialAd osetInterstitialAd)广告加载成功,osetInterstitialAd:广告对象
onLoadFail(String errorCode, String errorMessage)广告加载失败,errorCode:错误码,errorMessage:错误信息
OSETInterstitialAd插屏横屏广告对象
setUserId(String userId)设置userId,注意:这里设置只对单个广告对象有效,并且不影响全局广告的设置。一旦广告曝光结束,这里设置的userid不再持有
getECPM()获取广告ecpm,单位:千次分:注意,只有自营奇点广告返回价格,聚合广告AdSet不返回价格
getRequestId()获取单个广告对象唯一ID
isUsable()广告是否有效,返回true:广告有效,false:广告已失效过期 。失效后的广告继续播放是没有收益的,在调用广告曝光前请先检查广告是否有效
bidSuccess(BidAdInfo bidAdInfo)广告竞胜上报,bidAdInfo:竞败的广告媒体信息
bidFail(BidAdInfo bidAdInfo)广告竞败上报,bidAdInfo:竞败的广告媒体信息
showAd(Activity, OSETInterstitialListener)广告渲染,activity:Activity ,OSETInterstitialListener:广告状态监听
destroy()对象销毁
OSETInterstitialListener插屏横屏广告状态监听
onShow()广告曝光
onError(String var1,String var2)广告曝光失败(var1:错误码,var2:错误信息)
onClick()广告点击
onClose()广告关闭

全屏视频广告

OSETFullVideo.getInstance()
        .setContext(this)
        .setUserId(Common.USER_ID)
        .setPosId(Common.POS_ID_FULL_VIDEO)
        .loadAd(Activity,OSETFullAdLoadListener);
         
private OSETFullAdLoadListener osetFullAdLoadListener = OSETFullAdLoadListener {

    void onLoadSuccess(OSETFullAd osetFullAd){
        osetFullAd.showAd(Activity, OSETFullVideoListener())
    }
    
    void onLoadFail(String errorCode, String errorMessage){
        
    }

}
OSETFullVideo全屏广告
setContext(Activity activity)设置Activity
setUserId(String userId)设置UserId。注意,这里会全局设置,设置以后对任意类型广告都生效,如果想更改,请在播放广告之前调用广告对象的setUserId方法,广告对象的setUserId只对当前设置的广告对象有效,不会影响全局设置
setPosId(String posId)设置广告位id
loadAd(OSETFullAdLoadListener var)加载广告(var 广告加载结果监听)
startLoad()预加载广告,不会回调 OSETFullAdLoadListener 监听,可以提前加载广告,节省首次广告加载曝光时间,但是注意,预加载广告会获取设备id等用户隐私信息,审核可能会被拒,请酌情使用
OSETFullAdLoadListener全屏广告加载监听
onLoadSuccess(OSETFullAd osetFullAd)广告加载成功,osetFullAd:广告对象
onLoadFail(String errorCode, String errorMessage)广告加载失败,errorCode:错误码,errorMessage:错误信息
OSETFullAd全屏广告对象
setUserId(String userId)设置userId,注意:这里设置只对单个广告对象有效,并且不影响全局广告的设置。一旦广告曝光结束,这里设置的userid不再持有
getECPM()获取广告ecpm,单位:千次分:注意,只有自营奇点广告返回价格,聚合广告AdSet不返回价格
getRequestId()获取单个广告对象唯一ID
isUsable()广告是否有效,返回true:广告有效,false:广告已失效过期 。失效后的广告继续播放是没有收益的,在调用广告曝光前请先检查广告是否有效
bidSuccess(BidAdInfo bidAdInfo)广告竞胜上报,bidAdInfo:竞败的广告媒体信息
bidFail(BidAdInfo bidAdInfo)广告竞败上报,bidAdInfo:竞败的广告媒体信息
showAd(Activity, OSETFullVideoListener)广告渲染,activity:Activity ,OSETFullVideoListener:广告状态监听
destroy()对象销毁
OSETFullVideoListener全屏广告状态监听
onVideoStart()视频开始播放(不一定回调)
onError(String var1,String var2)广告曝光失败(var1:错误码,var2:错误信息)
onClick()广告点击
onClose()广告关闭
onShow()广告关曝光
onVideoEnd()视频播放结束(不一定回调)

激励视频广告

缓存广告

OSETRewardVideo.getInstance()
        .setContext(this)
        .setUserId(Common.USER_ID)
        .setPosId(Common.POS_ID_REWARD_VIDEO)
        .loadAd(OSETRewardAdLoadListener);

private OSETRewardAdLoadListener osetRewardAdLoadListener = OSETRewardAdLoadListener {

    void onLoadSuccess(OSETRewardAd osetRewardAd){
        osetRewardAd.showAd(Activity, OSETRewardListener())
    }
    
    void onLoadFail(String errorCode, String errorMessage){
        
    }

}
OSETRewardVideo激励广告
setContext(Activity activity)设置Activity
setUserId(String userId)设置UserId。注意,这里会全局设置,设置以后对任意类型广告都生效,如果想更改,请在播放广告之前调用广告对象的setUserId方法,广告对象的setUserId只对当前设置的广告对象有效,不会影响全局设置
setPosId(String posId)设置广告位id
loadAd(OSETRewardAdLoadListener var)加载广告(var 广告加载结果监听)
startLoad()预加载广告,不会回调 OSETRewardAdLoadListener 监听,可以提前加载广告,节省首次广告加载曝光时间,但是注意,预加载广告会获取设备id等用户隐私信息,审核可能会被拒,请酌情使用
OSETRewardAdLoadListener激励广告加载监听
onLoadSuccess(OSETRewardAd osetRewardAd)广告加载成功,osetRewardAd:广告对象
onLoadFail(String errorCode, String errorMessage)广告加载失败,errorCode:错误码,errorMessage:错误信息
OSETRewardAd激励广告对象
setUserId(String userId)设置userId,注意:这里设置只对单个广告对象有效,并且不影响全局广告的设置。一旦广告曝光结束,这里设置的userid不再持有
getECPM()获取广告ecpm,单位:千次分:注意,只有自营奇点广告返回价格,聚合广告AdSet不返回价格
getRequestId()获取单个广告对象唯一ID
isUsable()广告是否有效,返回true:广告有效,false:广告已失效过期 。失效后的广告继续播放是没有收益的,在调用广告曝光前请先检查广告是否有效
bidSuccess(BidAdInfo bidAdInfo)广告竞胜上报,bidAdInfo:竞败的广告媒体信息
bidFail(BidAdInfo bidAdInfo)广告竞败上报,bidAdInfo:竞败的广告媒体信息
showAd(Activity, OSETRewardListener)广告渲染,activity:Activity ,OSETRewardListener:广告状态监听
destroy()对象销毁
OSETRewardListener激励广告状态监听
onVideoStart()视频开始播放(不一定回调)
onError(String var1,String var2)广告曝光失败(var1:错误码,var2:错误信息)
onClick()广告点击
onClose()广告关闭
onShow()广告关曝光
onVideoEnd()视频播放结束(不一定回调)
onReward()广告产生收益,可以发放奖励
onServiceResponse()服务端回调

原生广告

java代码

 OSETNative.getInstance()
        .setContext(this)
        .setUserId(Common.USER_ID)
        .setPosId(Common.POS_ID_FULL_VIDEO)
        .loadAd(OSETNativeAdLoadListener);
        
private OSETNativeAdLoadListener osetNativeAdLoadListener = OSETNativeAdLoadListener {

    void onLoadSuccess(OSETNativeAd osetNativeAd){
        osetNativeAd.render(Activity, OSETNativeListener())
    }
    
    void onLoadFail(String errorCode, String errorMessage){
        
    }

} 
	
OSETNative原生信息流广告
setContext(Activity activity)设置Activity
setUserId(String userId)设置UserId。注意,这里会全局设置,设置以后对任意类型广告都生效,如果想更改,请在播放广告之前调用广告对象的setUserId方法,广告对象的setUserId只对当前设置的广告对象有效,不会影响全局设置
setPosId(String posId)设置广告位id
loadAd(OSETNativeAdLoadListener var)加载广告(var 广告加载结果监听)
startLoad()预加载广告,不会回调 OSETNativeAdLoadListener 监听,可以提前加载广告,节省首次广告加载曝光时间,但是注意,预加载广告会获取设备id等用户隐私信息,审核可能会被拒,请酌情使用
OSETNativeAdLoadListener原生信息流广告加载监听
onLoadSuccess(OSETNativeAd osetNativeAd)广告加载成功,osetNativeAd:广告对象
onLoadFail(String errorCode, String errorMessage)广告加载失败,errorCode:错误码,errorMessage:错误信息
OSETNativeAd原生信息流广告对象
setUserId(String userId)设置userId,注意:这里设置只对单个广告对象有效,并且不影响全局广告的设置。一旦广告曝光结束,这里设置的userid不再持有
getECPM()获取广告ecpm,单位:千次分:注意,只有自营奇点广告返回价格,聚合广告AdSet不返回价格
getRequestId()获取单个广告对象唯一ID
isUsable()广告是否有效,返回true:广告有效,false:广告已失效过期 。失效后的广告继续播放是没有收益的,在调用广告曝光前请先检查广告是否有效
bidSuccess(BidAdInfo bidAdInfo)广告竞胜上报,bidAdInfo:竞败的广告媒体信息
bidFail(BidAdInfo bidAdInfo)广告竞败上报,bidAdInfo:竞败的广告媒体信息
render(Activity, OSETNativeListener)广告渲染,activity:Activity ,OSETNativeListener:广告状态监听
destroy()对象销毁
OSETNativeListener原生信息流广告状态监听
onShow(View view)广告曝光
onError(String var1,String var2)广告渲染/曝光失败(var1:错误码,var2:错误信息)
onRenderSuccess(View view)渲染成功,view就是广告的控件,通过addView展示
onClick(View view)广告点击
onClose(View view)广告关闭

原生自渲染广告

请参考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_NATIVE_VIEW)
        .loadAd(Activity,OSETNativeViewListener);
               
private OSETNativeViewAdLoadListener osetNativeViewAdLoadListener = OSETNativeViewAdLoadListener {

    void onLoadSuccess(OSETNativeViewAd osetNativeViewAd){
        osetNativeViewAd.render(Activity,nativeViewConfig, OSETNativeViewListener())
    }
    
    void onLoadFail(String errorCode, String errorMessage){
        
    }

} 
方法名方法描述
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原生自渲染广告
setContext(Activity activity)设置Activity
setUserId(String userId)设置UserId。注意,这里会全局设置,设置以后对任意类型广告都生效,如果想更改,请在播放广告之前调用广告对象的setUserId方法,广告对象的setUserId只对当前设置的广告对象有效,不会影响全局设置
setPosId(String posId)设置广告位id
loadAd(OSETNativeViewAdLoadListener var)加载广告(var 广告加载结果监听)
startLoad()预加载广告,不会回调 OSETNativeViewAdLoadListener 监听,可以提前加载广告,节省首次广告加载曝光时间,但是注意,预加载广告会获取设备id等用户隐私信息,审核可能会被拒,请酌情使用
OSETNativeViewAdLoadListener原生自渲染广告加载监听
onLoadSuccess(OSETNativeViewAd osetNativeViewAd)广告加载成功,osetNativeViewAd:广告对象
onLoadFail(String errorCode, String errorMessage)广告加载失败,errorCode:错误码,errorMessage:错误信息
OSETNativeViewAd原生自渲染广告对象
setUserId(String userId)设置userId,注意:这里设置只对单个广告对象有效,并且不影响全局广告的设置。一旦广告曝光结束,这里设置的userid不再持有
getECPM()获取广告ecpm,单位:千次分:注意,只有自营奇点广告返回价格,聚合广告AdSet不返回价格
getRequestId()获取单个广告对象唯一ID
isUsable()广告是否有效,返回true:广告有效,false:广告已失效过期 。失效后的广告继续播放是没有收益的,在调用广告曝光前请先检查广告是否有效
bidSuccess(BidAdInfo bidAdInfo)广告竞胜上报,bidAdInfo:竞败的广告媒体信息
bidFail(BidAdInfo bidAdInfo)广告竞败上报,bidAdInfo:竞败的广告媒体信息
render(Activity, OSETNativeViewListener)广告渲染,activity:Activity ,OSETNativeViewListener:广告状态监听
destroy()对象销毁
OSETNativeViewListener原生自渲染广告状态监听
onShow(View view)广告曝光
onError(String var1,String var2)广告渲染/曝光失败(var1:错误码,var2:错误信息)
onRenderSuccess(View view)渲染成功,view就是广告的控件,通过addView展示
onClick(View view)广告点击
onClose(View view)广告关闭

Draw信息流广告

java代码

OSETDrawNative.getInstance()
            .setContext(this)
            .setUserId(Common.USER_ID)
            .setPosId(Common.POS_ID_DRAW_NATIVE)
            .loadAd(OSETDrawNativeAdLoadListener);


OSETDrawNativedraw视频广告
setContext(Activity activity)设置Activity
setUserId(String userId)设置UserId。注意,这里会全局设置,设置以后对任意类型广告都生效,如果想更改,请在播放广告之前调用广告对象的setUserId方法,广告对象的setUserId只对当前设置的广告对象有效,不会影响全局设置
setPosId(String posId)设置广告位id
loadAd(OSETNativeViewAdLoadListener var)加载广告(var 广告加载结果监听)
startLoad()预加载广告,不会回调 OSETNativeViewAdLoadListener 监听,可以提前加载广告,节省首次广告加载曝光时间,但是注意,预加载广告会获取设备id等用户隐私信息,审核可能会被拒,请酌情使用
OSETNativeViewAdLoadListenerdraw视频广告加载监听
onLoadSuccess(OSETDrawNativeAd osetDrawNativeAd)广告加载成功,osetDrawNativeAd:广告对象
onLoadFail(String errorCode, String errorMessage)广告加载失败,errorCode:错误码,errorMessage:错误信息
OSETDrawNativeAddraw视频广告对象
setUserId(String userId)设置userId,注意:这里设置只对单个广告对象有效,并且不影响全局广告的设置。一旦广告曝光结束,这里设置的userid不再持有
getECPM()获取广告ecpm,单位:千次分:注意,只有自营奇点广告返回价格,聚合广告AdSet不返回价格
getRequestId()获取单个广告对象唯一ID
isUsable()广告是否有效,返回true:广告有效,false:广告已失效过期 。失效后的广告继续播放是没有收益的,在调用广告曝光前请先检查广告是否有效
bidSuccess(BidAdInfo bidAdInfo)广告竞胜上报,bidAdInfo:竞败的广告媒体信息
bidFail(BidAdInfo bidAdInfo)广告竞败上报,bidAdInfo:竞败的广告媒体信息
render(Activity, OSETDrawNativeListener)广告渲染,activity:Activity ,OSETDrawNativeListener:广告状态监听
destroy()对象销毁
OSETDrawNativeListenerdraw视频广告状态监听
onVideoAdStartPlay(View view)视频开始播放
onError(String var1,String var2)广告渲染/曝光失败(var1:错误码,var2:错误信息)
onRenderSuccess(View view)渲染成功,view:广告的控件,通过addView展示
onVideoAdPaused(View view)广告暂停
onVideoAdContinuePlay(View view)广告暂停后播放
onVideoAdComplete(View view)广告播放完成
onClicked(View view)广告点击
onShow(View view)广告曝光

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) {
    OSETRewardVideo.getInstance()
            .setPosId(adId)
            .setContext(this)
            .loadAd(new OSETRewardAdLoadListener() {
                @Override
                public void onLoadSuccess(OSETRewardAd osetRewardAd) {
                    osetRewardAd.showAd(AdH5Activity.this, new OSETRewardListener());
                }
            
                @Override
                public void onLoadFail(String s, String s1) {
            
                }
});
}

/**
 * H5加载插屏广告,安卓提供调用的方法
 * 在H5中调用 window.adSetSdkJSInterface.showInsertAd(adId)
 */
@JavascriptInterface
public void showInsertAd(String adId) {
    OSETInterstitial.getInstance()
                .setPosId(adId)
                .setContext(AdH5Activity.this)
                .loadAd(new OSETInterstitialAdLoadListener() {
                    @Override
                    public void onLoadSuccess(OSETInterstitialAd osetInterstitialAd) {
                        osetInterstitialAd.showAd(AdH5Activity.this, new OSETInterstitialListener());
                    }
    
                    @Override
                    public void onLoadFail(String s, String s1) {
    
                    }
            });
}

/**
 * H5加载全屏视频广告,安卓提供调用的方法
 * 在H5中调用 window.adSetSdkJSInterface.showFullVideoAd(adId)
 */
@JavascriptInterface
public void showFullVideoAd(String adId) {
        OSETFullVideo.getInstance()
                        .setPosId(adId)
                        .setContext(this)
                        .loadAd(new OSETFullAdLoadListener() {
                            @Override
                            public void onLoadSuccess(OSETFullAd osetFullAd) {
                                osetFullAd.showAd(AdH5Activity.this, new OSETFullVideoListener());
                            }
                
                            @Override
                            public void onLoadFail(String s, String s1) {
                
                            }
                        });
}

短视频短剧内容插件

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()返回处理
destroy()对象销毁

资讯内容

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);

监听方法说明

信息流模块监听

	 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表示验证成

        }
    }

第三方聚合自定义ADN适配器对接说明

一、导入SDK(maven方式)推荐

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

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

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

2、在module的build.gradle中引入sdk

android {
    ...
    defaultConfig {
        ...
        multiDexEnabled true
    }
}
dependencies {
    //基础包
    implementation 'com.shenshi:ad-openset-sdk:6.5.0.6'
    //适配器包
    implementation 'com.shenshi:custom-taku-adapter:1.0.0.0'

    //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'
}

二、导入SDK(aar方式)

1、在项目的根目录的build.gradle文件\setting.gradle文件的对应节点引入以下内容 start-end

buildscript {
    repositories {
        // start
//        荣耀
        maven { url 'https://developer.hihonor.com/repo' }
        // end
    }
}

allprojects {
    repositories {
        // start
//        荣耀
        maven { url 'https://developer.hihonor.com/repo' }
        // end
    }
}

2、在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'
    
    //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'
    
}

2、在官网后台下载sdk压缩包

3、解压后复制adn文件夹中的 openset_sdk_.arr 文件和custom文件夹下的对应渠道的适配器aar文件 (taku -> topon/taku) 以及根目录的oaid_sdk_.aar包到module的libs文件夹(*代表版本号)

三、权限和配置

1、将解压后的xml文件夹复制到res文件夹下面 2、打开AndroidManifest.xml文件,将以下内容复制到指定的位置

<manifest ...>
    ...
    <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.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <application
            ...
            android:networkSecurityConfig="@xml/network_security_config"
    >
    </application>

</manifest>

**注意,除了<uses-permission android:name="android.permission.INTERNET"/>权限必需外,其他的权限都是非必需的,但是没有会影响广告ecpm **

四、混淆配置


#-------------- 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-------------

#----------log start--------------
-keep class com.aliyun.sls.android.producer.** { *; }
-keep interface com.aliyun.sls.android.producer.* { *; }
#----------log 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--------------

#-------------- 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--------------
        
#-------------- 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-------------

五、隐私合规配置

new OSETCustomController() {

    /**
     * 是否允许SDK主动使用地理位置信息
     *
     * @return true可以获取,false禁止获取。默认为true
     */
    public boolean canReadLocation() {
        return true;
    }

    /**
     * 当canReadLocation=false时,可传入地理位置信息,sdk使用您传入的地理位置信息
     *
     * @return 地理位置参数
     */
    public Location getLocation() {
        return null;
    }

    /**
     * 是否允许SDK主动使用手机硬件参数,如:imei, android_id, meid, imsi, iccid
     *
     * @return true可以使用,false禁止使用。默认为true
     */
    public boolean canUsePhoneState() {
        return true;
    }

    /**
     * 当canUsePhoneState=false时,可传入原始的imei信息,sdk使用您传入的原始imei信息。
     * 注意:请传入原始imei值,无需使用md5加密,sdk整体信息加密传输已满足合规需要
     */
    public String getImei() {
        return "";
    }

    /**
     * 当canUsePhoneState=false时,可传入android_id信息,sdk使用您传入的android_id
     */
    public String getAndroidId() {
        return "";
    }

    /**
     * 是否允许SDK主动使用oaid
     *
     * @return true可以使用,false禁止使用。默认为true
     */
    public boolean canUseOaid() {
        return true;
    }

    /**
     * 当canUseOaid=false时,可传入oaid信息,sdk使用您传入的oaid信息
     * 注意:请传入原始oaid,无需使用md5加密,sdk整体信息加密传输已满足合规需要
     */
    public String getOaid() {
        return "";
    }

    /**
     * 是否允许SDK主动使用mac_address
     *
     * @return true可以使用,false禁止使用。默认为true
     */
    public boolean canUseMacAddress() {
        return true;
    }

    /**
     * 当canUseMacAddress=false时,可传入mac地址信息,sdk使用您传入的mac地址信息
     */
    public String getMacAddress() {
        return "";
    }

    /**
     * 是否允许SDK主动使用ACCESS_NETWORK_STATE权限
     *
     * @return true可以使用,false禁止使用。默认为true
     */
    public boolean canUseNetworkState() {
        return true;
    }

    /**
     * 是否允许SDK主动使用存储权限
     *
     * @return true可以使用,false禁止使用。默认为true
     */
    public boolean canUseStoragePermission() {
        return true;
    }

    /**
     * 是否允许SDK主动读取app安装列表
     *
     * @return true可以使用,false禁止使用。默认为true
     */
    public boolean canReadInstalledPackages() {
        return true;
    }

    /**
     * 当canReadInstalledPackages=false时,可传入package list信息,sdk使用您传入的package list
     */
    public List<String> getInstalledPackages() {
        return null;
    }

    /**
     * 是否启用个性化广告开关,默认为true
     * @return true:开启,false:关闭
     */
    public boolean canUsePersonalizedAd() {
        return true;
    }

}

OSETSDK.getInstance()
    .setCustomController()

六、测试ID同上面的测试id

TopOn(Taku)配置说明

1、打开taku官网后台

2、点击广告平台

3、点击自定义广告平台

4、广告平台名称填写奇点

5、在应用及广告源参数栏中的应用中点击添加参数,参数名称填写应用ID,Key填写app_id,属性必填

6、在应用及广告源参数栏中的广告源中点击添加参数,参数名称填写广告位ID,Key填写unit_id,属性必填

7、在Adapter类名Android中填入以下内容

广告类型适配器类
激励视频com.kc.openset.third.custom.to.OSETCustomerToRewardAdapter
插屏com.kc.openset.third.custom.to.OSETCustomerToInterstitialAdapter
横幅目前奇点广告暂不支持横幅广告
原生com.kc.openset.third.custom.to.OSETCustomerToNativeAdapter
开屏com.kc.openset.third.custom.to.OSETCustomerToSplashAdapter
图片名称

8、打开聚合管理->选择添加广告源->添加单个广告源

9、选择奇点、应用ID填入神蓍后台申请的AppKey,广告源名称自己定义,广告位ID填写对应广告类型的广告位ID,头部竞价选择是(奇点只有竞价广告)。点确定保存,半小时后生效

图片名称

10、至此,奇点广告在taku的自定义广告平台配置已完成,每次修改都要半小时后才能生效。

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