OpenSet Android SDK接入文档(AndroidStudio)
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、虽然初始化以及每种广告都有设置UserId的方法,但是不管在什么广告类型设置,不管在代码中任务位置设置,都是全局生效的,即在banner中设置了userid,在激励广告中也是同一个userid,除非再设置一次进行重置,所以对于需要服务端回调并且回调中带有场景值等透传信息的,在播放对应广告前应该先调用setUserId设置一下userid,并且在这次广告看完之前不允许再设置新的userid。
9、startLoad方法可以预加载广告放在首页调用。但用户今日没有看广告的需求则不建议调用。startload只是预加载,最终播放广告还需要调用showAd方法
10、除了开屏广告,其他的广告类型都有startLoad方法对广告进行预加载。全局只需要调用一次即可。没有状态回调。
11、所有广告必须在主线程调用
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 {
//基础包 start
implementation("com.shenshi:ad-openset-sdk:6.5.6.0")
//基础包 end
// 百度 start
// 注意百度9.373版本开始,强制使用Androidx,如果使用这个版本以上的百度sdk,请将项目改为Androidx
implementation 'com.shenshi:ad-baidu-adapter:9.450.3'
// 百度 end
// 穿山甲&GroMore start
implementation("com.shenshi:ad-gromore-adapter:7.6.4.3.2")// 纯广告SDK
// 穿山甲&GroMore end
//sigmob start
implementation("com.shenshi:ad-sigmob-adapter:4.25.80.1")
//sigmob end
//快手 start
implementation 'com.shenshi:ad-kuaishou-adapter:5.5.10.1.1'// 快手-纯广告SDK
//快手 end
//广点通 start
implementation 'com.shenshi:ad-guangdiantong-adapter:4.690.1560.2'
//广点通 end
//倍孜 start
// 注意百度5.5.0.2**版本开始,强制使用Androidx,如果使用这个版本以上的百度sdk,请将项目改为Androidx
implementation 'com.shenshi:ad-beizi-adapter:5.5.0.2.3'
//倍孜 end
//tanx start
implementation 'com.shenshi:ad-tanx-adapter:3.7.37.1'
//tanx end
//海量 start
implementation 'com.shenshi:ad-hailiang-adapter:3.481.10.447.4'
//海量 end
//章鱼 start
implementation 'com.shenshi:ad-zhangyu-adapter:2.6.6.29.1'
//章鱼 end
//华为 start
implementation 'com.shenshi:ad-huawei-adapter:13.4.86.300.1'
//华为 end
//multidex 64K问题,如果已添加请忽略
implementation 'androidx.multidex:multidex:2.0.1'
//微信小程序广告预算相关,引入可提升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文件夹中缺少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 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'com.google.android.material:material:1.6.1'
implementation 'io.github.aliyun-sls:aliyun-log-android-sdk:2.7.0'
implementation 'com.hihonor.mcs:ads-identifier:1.0.2.301'
//tanx start
implementation("com.tanx:TanxUISDK:3.7.37")
implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.8.0'
//tanx end
// 如要对接华为广告渠道,请务必添加此广告SDK的引入
// huawei SDK start
implementation("com.huawei.hms:ads-lite:13.4.86.300")
// huawei SDK end
//multidex 64K问题,如果已添加请忽略
implementation 'androidx.multidex:multidex:2.0.1'
//微信小程序广告预算相关,引入可提升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"
>
...
</application>
</manifest>3、资源压缩配置(shrinkResources=true 必看)
如果 release 构建未开启
shrinkResources=true(即未启用资源压缩),可跳过本节。如果开启了资源压缩,必须按本节配置
keep.xml,否则在展示广告时会出现Resources$NotFoundException导致闪退。
在 app 模块下创建
res/raw/keep.xml(路径:app/src/main/res/raw/keep.xml)填入以下完整内容
<?xml version="1.0" encoding="utf-8"?>
<!--
用途: 防止 release 构建开启 shrinkResources=true 时,
OpenSet 聚合广告 SDK 的资源(通过 JNI/反射加载)被压缩器误删。
资源条目: 101
-->
<resources xmlns:tools="http://schemas.android.com/tools"
tools:shrinkMode="safe"
tools:keep="
@anim/oset_*,
@drawable/oset_*,
@layout/oset_*,
@mipmap/oset_*,
@xml/oset_*,
@color/oset_*,
@string/oset_*,
@style/OSET_*,
@attr/adSetMaxWidth,
@attr/adSetMaxHeight" />混淆配置
#-------------- AdSet start-------------
-keep class com.kc.openset.**{*;}
-keep class com.od.**{*;}
-keep class com.kc.aw.**{*;}
-keep class com.kc.bw.**{*;}
-keep class com.kc.cw.**{*;}
-keep class com.kc.dw.**{*;}
-keep class com.kc.ew.**{*;}
-keep class com.kc.fw.**{*;}
-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
# WindAd
-keep class sun.misc.Unsafe { *; }
-keep class com.sigmob.sdk.**{ *;}
-keep interface com.sigmob.sdk.**{ *;}
-keep class com.sigmob.windad.**{ *;}
-keep interface com.sigmob.windad.**{ *;}
-keep class com.czhj.**{ *;}
-keep interface com.czhj.**{ *;}
-keep class com.tan.mark.**{*;}
# miitmdid
-dontwarn com.bun.**
-keep class com.bun.** {*;}
-keep class a.**{*;}
-keep class XI.CA.XI.**{*;}
-keep class XI.K0.XI.**{*;}
-keep class XI.XI.K0.**{*;}
-keep class XI.vs.K0.**{*;}
-keep class XI.xo.XI.XI.**{*;}
-keep class com.asus.msa.SupplementaryDID.**{*;}
-keep class com.asus.msa.sdid.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class com.zui.opendeviceidlibrary.**{*;}
-keep class org.json.**{*;}
-keep public class com.netease.nis.sdkwrapper.Utils {public <methods>;}
# 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--------------
#----------华为SDK start--------------
-keep class com.huawei.openalliance.ad.** { *; }
-keep class com.huawei.hms.ads.** { *; }
#----------华为SDK end--------------
#-------------- 章鱼 start-------------
-dontwarn com.octopus.ad.**
-keep class com.octopus.ad.** {*;}
#-------------- 章鱼 end-------------隐私合规配置
接入示例
new OSETCustomController() {
/**
* 是否允许SDK主动使用地理位置信息
*
* @return true可以获取,false禁止获取。默认为true
*/
public boolean canReadLocation() {
return true;
}
/**
* 当canReadLocation=false时,可传入地理位置信息,sdk使用您传入的地理位置信息
*
* @return 地理位置参数
*/
public Location getLocation() {
return null;
}
/**
* 是否允许SDK主动使用手机硬件参数,如:imei, meid, imsi, iccid
*
* @return true可以使用,false禁止使用。默认为true
*/
public boolean canUsePhoneState() {
return true;
}
/**
* 当canUsePhoneState=false时,可传入原始的imei信息,sdk使用您传入的原始imei信息。
* 注意:请传入原始imei值,无需使用md5加密,sdk整体信息加密传输已满足合规需要
*/
public String getImei() {
return "";
}
/**
* 是否允许读取androidID
*/
public String canUseAndroidId() {
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
| appkey | E6097975B89E83D6 |
|---|---|
| 开屏广告位id | 7D5239D8D88EBF9B6D317912EDAC6439 |
| 插屏广告位id | 1D273967F51868AF2C4E080D496D06D0 |
| banner广告位id | 107EB50EDFE65EA3306C8318FD57D0B3 |
| 激励视频广告位id | 09A177D681D6FB81241C3DCE963DCB46 |
| 全屏视频广告位id | D879C3DED01D5CE319CD2751474BA8E4 |
| 信息流(原生)广告位id | 89FEEA66F9228ED3F6420294B89A902B |
| draw视频流广告位id | 6328AB893D5DBA6B9D2791B54E1D2C16 |
初始化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,单位:千次分 |
| 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){
}
}| OSETBanner | Banner广告 |
|---|---|
| setContext(Activity activity) | 设置Activity |
| setUserId(String userId) | 设置UserId。注意,这里会全局设置,设置以后对任意类型广告都生效,如果想更改,请在播放广告之前调用广告对象的setUserId方法,广告对象的setUserId只对当前设置的广告对象有效,不会影响全局设置 |
| setPosId(String posId) | 设置广告位id |
| loadAd(OSETBannerAdLoadListener var) | 加载广告(var 广告加载结果监听) |
| startLoad() | 预加载广告,不会回调 OSETBannerAdLoadListener 监听,可以提前加载广告,节省首次广告加载曝光时间,但是注意,预加载广告会获取设备id等用户隐私信息,审核可能会被拒,请酌情使用 |
| OSETBannerAdLoadListener | banner广告加载监听 |
|---|---|
| onLoadSuccess(OSETBannerAd osetBannerAd) | 广告加载成功,osetBannerAd:广告对象 |
| onLoadFail(String errorCode, String errorMessage) | 广告加载失败,errorCode:错误码,errorMessage:错误信息 |
| OSETBannerAd | banner广告对象 |
|---|---|
| setUserId(String userId) | 设置userId,注意:这里设置只对单个广告对象有效,并且不影响全局广告的设置。一旦广告曝光结束,这里设置的userid不再持有 |
| getECPM() | 获取广告ecpm,单位:千次分 |
| getRequestId() | 获取单个广告对象唯一ID |
| isUsable() | 广告是否有效,返回true:广告有效,false:广告已失效过期 。失效后的广告继续播放是没有收益的,在调用广告曝光前请先检查广告是否有效 |
| bidSuccess(BidAdInfo bidAdInfo) | 广告竞胜上报,bidAdInfo:竞败的广告媒体信息 |
| bidFail(BidAdInfo bidAdInfo) | 广告竞败上报,bidAdInfo:竞败的广告媒体信息 |
| render(Activity, OSETBannerListener) | 广告渲染,activity:Activity ,OSETBannerListener:广告状态监听 |
| destroy() | 对象销毁 |
| OSETBannerListener | Banner广告状态监听 |
|---|---|
| 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,单位:千次分 |
| 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,单位:千次分 |
| 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,单位:千次分 |
| 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,单位:千次分 |
| 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,单位:千次分 |
| 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) | 广告关闭 |
原生自渲染广告
原生自渲染广告在 onLoadSuccess 回调里根据 osetNativeViewAd.getQDNativeViewAd() 是否为空分成两种渲染路径:
getQDNativeViewAd() != null:走 媒体自渲染qdRender()(推荐)。上游是奇点自渲染渠道,媒体端拿到原始素材、文案、合规信息,自己填布局、自己注册交互事件,UI 完全可控。getQDNativeViewAd() == null:走 平台默认渲染platRender()。上游不是奇点渠道,需要通过NativeViewConfig把布局中的控件 id 告诉 SDK,由 SDK 自行渲染。
Demo 布局与控件请参考 native_view_layout 文件,控件类型不能更改。
加载广告
OSETNativeView.getInstance()
.setContext(activity)
.setUserId(Common.USER_ID)
.setPosId(Common.POS_ID_NATIVE_VIEW)
.loadAd(adLoadListener);
private final OSETNativeViewAdLoadListener adLoadListener = new OSETNativeViewAdLoadListener() {
@Override
public void onLoadSuccess(OSETNativeViewAd osetNativeViewAd) {
// 缓存起来,用于生命周期结束时销毁
mOSETNativeViewAdList.add(osetNativeViewAd);
if (osetNativeViewAd.getQDNativeViewAd() != null) {
// 奇点渠道:媒体自渲染(推荐)
qdRender(osetNativeViewAd);
} else {
// 非奇点渠道:走平台默认渲染
platRender(osetNativeViewAd);
}
}
@Override
public void onLoadFail(String errorCode, String errorMessage) { }
};
// Activity 销毁时统一释放广告对象,避免资源泄漏
@Override
protected void onDestroy() {
super.onDestroy();
for (OSETNativeViewAd ad : mOSETNativeViewAdList) {
ad.destroy();
}
mOSETNativeViewAdList.clear();
}渲染方式一:媒体自渲染 qdRender()(推荐)
拿到 OSETQDNativeViewAd 后,自己把 title / desc / icon / 图片或视频 View / 应用合规信息填进你的布局,最后通过 registerViewForInteraction 把广告容器、转化按钮、关闭按钮和点击 View 集合登记给 SDK。没登记的 View 曝光/点击数据无效。
private void qdRender(OSETNativeViewAd osetNativeViewAd) {
// 1. inflate 你自己的广告布局
ViewGroup adContainerView = (ViewGroup) LayoutInflater.from(this)
.inflate(R.layout.native_view_layout, ll_information, false);
TextView tvTitle = adContainerView.findViewById(R.id.tv_title);
TextView tvContent = adContainerView.findViewById(R.id.tv_content);
ImageView ivIcon = adContainerView.findViewById(R.id.iv_icon);
Button btnAction = adContainerView.findViewById(R.id.btn_action);
ImageView ivClose = adContainerView.findViewById(R.id.iv_close);
FrameLayout flMedia = adContainerView.findViewById(R.id.fl_media);
// 应用合规信息控件
TextView tvAppName = adContainerView.findViewById(R.id.tv_app_name);
TextView tvAppVersion = adContainerView.findViewById(R.id.tv_app_version);
TextView tvAppAuthor = adContainerView.findViewById(R.id.tv_app_auother);
TextView tvAppPermission = adContainerView.findViewById(R.id.tv_app_permission);
TextView tvAppPrivacy = adContainerView.findViewById(R.id.tv_app_privacy);
TextView tvAppFunction = adContainerView.findViewById(R.id.tv_app_function);
OSETQDNativeViewAd qdAd = osetNativeViewAd.getQDNativeViewAd();
if (!qdAd.isUsable()) return; // 广告已过期,不要继续曝光
// 2. 填充基础素材
tvTitle.setText(qdAd.getAdTitle());
tvContent.setText(qdAd.getAdContent());
OSETImageLoader.getInstance(this).loadImage(this, qdAd.getAdIcon(), ivIcon);
if (!TextUtils.isEmpty(qdAd.getAdActionText())) {
btnAction.setText(qdAd.getAdActionText());
}
// 3. 主素材:视频 or 图片。视频由 SDK 提供 videoView,直接 addView
if (qdAd.isVideoMaterial()) {
flMedia.addView(qdAd.getVideoView(this));
} else {
ImageView adImg = new ImageView(this);
if (qdAd.getAdImageUrls() != null && !qdAd.getAdImageUrls().isEmpty()) {
OSETImageLoader.getInstance(this)
.loadImage(this, qdAd.getAdImageUrls().get(0).getUrl(), adImg);
}
flMedia.addView(adImg);
}
// 4. 下载类广告的合规信息(应用名/版本/开发者 + 权限/功能/隐私 点击跳转)
if (qdAd.isAppInfoVisibility()) {
tvAppName.setText(qdAd.getAppName());
tvAppVersion.setText(qdAd.getAppVersion());
tvAppAuthor.setText(qdAd.getAppDeveloper());
// 权限/功能/隐私三个 TextView 的跳转由 SDK 内部处理
qdAd.bindPrivacyInfoClickListener(this, tvAppPermission, tvAppFunction, tvAppPrivacy);
}
// 5. 摇一摇/扭一扭触发点击的视图(如果广告开启了此能力)
if (qdAd.enableRotate()) {
View rotateView = qdAd.getRotateView(this);
if (rotateView != null) flMedia.addView(rotateView);
}
// 6. **必做**:注册广告交互事件,否则曝光/点击数据无效
List<View> clickViews = new ArrayList<>();
clickViews.add(adContainerView);
clickViews.add(btnAction);
qdAd.registerViewForInteraction(
this, // Activity
adContainerView, // 广告容器根布局(不能为 null)
btnAction, // 转化按钮(无则传 null)
ivClose, // 关闭按钮(无则传 null)
clickViews, // 参与点击的 View 集合(至少一个)
new OSETQDNativeViewAd.OnQDAdInteractionListener() {
@Override public void onAdShow(OSETQDNativeViewAd ad) { }
@Override public void onAdClicked(OSETQDNativeViewAd ad) { }
@Override public void onAdClosed(OSETQDNativeViewAd ad) {
// 关闭后自行把 adContainerView 从父容器移除
ll_information.removeView(adContainerView);
}
@Override public void onAdVideoComplete() { }
@Override public void onAdDetailViewClosed(OSETQDNativeViewAd ad) { }
});
// 7. 把 adContainerView 挂到列表/页面
ll_information.addView(adContainerView);
}渲染方式二:平台默认渲染 platRender()
上游不是奇点渠道(getQDNativeViewAd() == null)时使用此方式。你只提供一份布局,把里面的控件 id 通过 NativeViewConfig 告诉 SDK,render() 会返回一个渲染完的 View 直接 addView 即可。
private void platRender(OSETNativeViewAd osetNativeViewAd) {
osetNativeViewAd.render(this, getNativeViewConfig(), new OSETNativeViewListener() {
@Override public void onRenderSuccess(View view) {
ll_information.addView(view);
}
@Override public void onShow(View view) { }
@Override public void onClick(View view) { }
@Override public void onClose(View view) {
ll_information.removeView(view);
}
@Override public void onError(String code, String msg) { }
@Override public void onAdVideoComplete() { }
@Override public void onAdDetailViewClosed() { }
});
}
private NativeViewConfig getNativeViewConfig() {
return 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)
.setAppAuthorNameId(R.id.tv_app_auother)
.setAppVersionId(R.id.tv_app_version)
.setAppPermissionId(R.id.tv_app_permission)
.setAppPrivacyId(R.id.tv_app_privacy)
.setAppFunctionId(R.id.tv_app_function)
.setAdIconId(R.id.iv_icon)
.setAdMediaId(R.id.fl_media)
.builder();
}API 表
| NativeViewConfig(平台渲染专用) | 方法描述 |
|---|---|
| setLayoutId | 布局文件 |
| setTitleId | 标题 |
| setAdSourceId | 广告来源 |
| setAdSourceImgId | 广告来源图标 |
| setContentId | 广告内容 |
| setActBtnId | 广告事件按钮 |
| setCloseImgId | 广告关闭按钮图片 |
| setAppNameId | 下载类广告 app 名字 |
| setAppAuthorNameId | 下载类广告 app 作者 |
| setAppVersionId | 下载类广告 app 版本 |
| setAppPermissionId | 下载类广告 app 权限跳转 |
| setAppPrivacyId | 下载类广告 app 隐私跳转 |
| setAppFunctionId | 下载类广告 app 功能跳转 |
| setAdIconId | 广告图标 |
| setAdMediaId | 主素材容器(图/视频共用) |
| OSETNativeView | 原生自渲染广告加载入口 |
|---|---|
| setContext(Activity activity) | 设置 Activity |
| setUserId(String userId) | 设置 UserId。全局生效;如需覆盖单个广告,请在广告对象上再次调用 setUserId |
| setPosId(String posId) | 设置广告位 id |
| loadAd(OSETNativeViewAdLoadListener var) | 加载广告 |
| startLoad() | 预加载广告,不会回调 OSETNativeViewAdLoadListener。可提前拉取节省首次曝光耗时,但会读取设备 id 等用户信息,审核可能被拒,请酌情使用 |
| OSETNativeViewAdLoadListener | 原生自渲染广告加载监听 |
|---|---|
| onLoadSuccess(OSETNativeViewAd osetNativeViewAd) | 广告加载成功 |
| onLoadFail(String errorCode, String errorMessage) | 广告加载失败 |
| OSETNativeViewAd | 原生自渲染广告对象 |
|---|---|
| setUserId(String userId) | 只对当前广告对象生效,不影响全局配置 |
| getECPM() | 获取广告 ecpm,单位:千次分 |
| getRequestId() | 获取单个广告对象唯一 ID |
| isUsable() | 广告是否有效。失效广告继续曝光无收益,曝光前请务必检查 |
| bidSuccess(BidAdInfo bidAdInfo) | 广告竞胜上报 |
| bidFail(BidAdInfo bidAdInfo) | 广告竞败上报 |
| getQDNativeViewAd() | 返回 OSETQDNativeViewAd,非空表示上游为奇点渠道,走媒体自渲染;为 null 表示只能走 render() 走平台渲染 |
| render(Activity, NativeViewConfig, OSETNativeViewListener) | 平台默认渲染方式,NativeViewConfig 描述布局映射,回调返回渲染好的 View |
| destroy() | 对象销毁 |
| OSETQDNativeViewAd(媒体自渲染广告对象) | 方法描述 |
|---|---|
| isUsable() | 广告是否有效。曝光前必须校验,返回 false 时中断本次渲染 |
| getAdEcpm() | 广告 ecpm,单位:千次分 |
| getRequestId() | 广告请求唯一 id |
| getAdTitle() | 广告标题 |
| getAdContent() | 广告描述 |
| getAdIcon() | 广告图标 URL |
| getAdSource() | 广告来源文案(可能为空,兜底显示 "广告") |
| getAdSourceImg() | 广告来源角标 logo URL |
| getAdActionText() | 转化按钮推荐文案("立即下载" / "查看详情" 等) |
| getAdImageUrls() | 图片素材 List<QDImages>,视频广告时为空 |
| isVideoMaterial() | 素材是否为视频 |
| getVideoView(Context context) | 视频播放器组件 View,直接 addView 到主素材容器;仅在 isVideoMaterial() 为 true 时有效 |
| getVideoCoverImageUrl() | 视频封面图 URL |
| enableRotate() | 是否开启摇一摇 / 扭一扭触发点击 |
| getRotateView(Context context) | 摇一摇提示动画 View,enableRotate() 为 true 时叠加到主素材容器 |
| isAppInfoVisibility() | 是否需要显示应用合规信息(下载类广告 true) |
| getAppName() / getAppVersion() / getAppDeveloper() | 下载类广告的应用名 / 版本 / 开发者 |
| getPermissionInfoUrl() / getIntroductionInfoUrl() / getAppPrivacyInfoUrl() | 权限 / 功能介绍 / 隐私政策 URL,通常无需自己弹页面 |
| bindPrivacyInfoClickListener(Context, tvPermission, tvIntroduction, tvPrivacy) | 一行把三个合规 TextView 的点击跳转交给 SDK 内置 WebView 处理 |
| registerViewForInteraction(Activity, adContainer, actBtn, closeBtn, clickViews, OnQDAdInteractionListener) | 必调。注册广告交互,未注册的 View 曝光/点击均不上报 |
| OSETNativeViewListener(平台渲染监听) | 方法描述 |
|---|---|
| onRenderSuccess(View view) | 渲染成功,view 为可直接 addView 的广告控件 |
| onShow(View view) | 广告曝光 |
| onClick(View view) | 广告点击 |
| onClose(View view) | 广告关闭 |
| onError(String code, String e) | 广告渲染 / 曝光失败 |
| onAdVideoComplete() | 视频播放完成 |
| onAdDetailViewClosed() | 落地页 / 详情页关闭 |
| OnQDAdInteractionListener(媒体自渲染监听) | 方法描述 |
|---|---|
| onAdShow(OSETQDNativeViewAd ad) | 广告曝光 |
| onAdClicked(OSETQDNativeViewAd ad) | 广告点击 |
| onAdClosed(OSETQDNativeViewAd ad) | 广告关闭 |
| onAdVideoComplete() | 视频播放完成 |
| onAdDetailViewClosed(OSETQDNativeViewAd ad) | 落地页 / 详情页关闭 |
Draw信息流广告
java代码
OSETDrawNative.getInstance()
.setContext(this)
.setUserId(Common.USER_ID)
.setPosId(Common.POS_ID_DRAW_NATIVE)
.loadAd(OSETDrawNativeAdLoadListener);| OSETDrawNative | draw视频广告 |
|---|---|
| setContext(Activity activity) | 设置Activity |
| setUserId(String userId) | 设置UserId。注意,这里会全局设置,设置以后对任意类型广告都生效,如果想更改,请在播放广告之前调用广告对象的setUserId方法,广告对象的setUserId只对当前设置的广告对象有效,不会影响全局设置 |
| setPosId(String posId) | 设置广告位id |
| loadAd(OSETNativeViewAdLoadListener var) | 加载广告(var 广告加载结果监听) |
| startLoad() | 预加载广告,不会回调 OSETNativeViewAdLoadListener 监听,可以提前加载广告,节省首次广告加载曝光时间,但是注意,预加载广告会获取设备id等用户隐私信息,审核可能会被拒,请酌情使用 |
| OSETNativeViewAdLoadListener | draw视频广告加载监听 |
|---|---|
| onLoadSuccess(OSETDrawNativeAd osetDrawNativeAd) | 广告加载成功,osetDrawNativeAd:广告对象 |
| onLoadFail(String errorCode, String errorMessage) | 广告加载失败,errorCode:错误码,errorMessage:错误信息 |
| OSETDrawNativeAd | draw视频广告对象 |
|---|---|
| setUserId(String userId) | 设置userId,注意:这里设置只对单个广告对象有效,并且不影响全局广告的设置。一旦广告曝光结束,这里设置的userid不再持有 |
| getECPM() | 获取广告ecpm,单位:千次分 |
| getRequestId() | 获取单个广告对象唯一ID |
| isUsable() | 广告是否有效,返回true:广告有效,false:广告已失效过期 。失效后的广告继续播放是没有收益的,在调用广告曝光前请先检查广告是否有效 |
| bidSuccess(BidAdInfo bidAdInfo) | 广告竞胜上报,bidAdInfo:竞败的广告媒体信息 |
| bidFail(BidAdInfo bidAdInfo) | 广告竞败上报,bidAdInfo:竞败的广告媒体信息 |
| render(Activity, OSETDrawNativeListener) | 广告渲染,activity:Activity ,OSETDrawNativeListener:广告状态监听 |
| destroy() | 对象销毁 |
| OSETDrawNativeListener | draw视频广告状态监听 |
|---|---|
| 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) {
}
});
}第三方聚合自定义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.6.0'
//适配器包
implementation 'com.shenshi:custom-taku-adapter:1.0.1.1'// taku
implementation 'com.shenshi:custom-gromore-adapter:1.0.0.9'// gromore
implementation 'com.shenshi:custom-tobid-adapter:1.0.0.9'// tobid
//multidex 64K问题,如果已添加请忽略
implementation 'androidx.multidex:multidex:2.0.1'
//微信小程序广告预算相关,引入可提升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 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'com.google.android.material:material:1.6.1'
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 'androidx.multidex:multidex:2.0.1'
//微信小程序广告预算相关,引入可提升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.OSETCustomerToBannerAdapter |
| 原生 | com.kc.openset.third.custom.to.OSETCustomerToNativeAdapter |
| 开屏 | com.kc.openset.third.custom.to.OSETCustomerToSplashAdapter |

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

10、至此,奇点广告在taku的自定义广告平台配置已完成,每次修改都要半小时后才能生效。
GroMore配置说明
1、打开GroMore官网后台
2、创建应用,如果已创建则打开应用,点击添加自定义广告网络
3、广告网络名称填奇点,账户名称填shenshi_qidian,币种人民币,Android Adapter类名如下:
| 广告类型 | 适配器类 |
|---|---|
| 初始化类名 | com.kc.openset.third.custom.gm.OSETCustomerGmInitAdapter |
| 开屏 | com.kc.openset.third.custom.gm.OSETCustomerGmSplashAdapter |
| 插屏 | com.kc.openset.third.custom.gm.OSETCustomerGmInterstitialAdapter |
| 激励视频 | com.kc.openset.third.custom.gm.OSETCustomerGmRewardAdapter |
| 信息流 | com.kc.openset.third.custom.gm.OSETCustomerGmN**ativeAdapter |
| 横幅 | 目前奇点广告暂不支持横幅广告 |
4、添加代码位,广告网络选择奇点广告,应用ID填入神蓍后台申请的AppKey,代码位ID填入神蓍后台申请的广告位ID
GroMore添加自定义广告网络官方文档,点击此处
ToBid配置说明
1、打开ToBid流量变现平台
2、创建应用,如果已创建则打开ToBid聚合工具
3、打开广告网络,管理自定义网络,添加自定义广告网络,广告网络名称填写奇点,广告网络appId填写奇点后台申请的appId,适配器类信息按如下填写
| 广告类型 | 适配器类 |
|---|---|
| 初始化类名 | com.kc.openset.third.custom.tobid.OSETCustomToBidInitAdapter |
| 开屏 | com.kc.openset.third.custom.tobid.OSETCustomToBidSplashAdapter |
| 插屏 | com.kc.openset.third.custom.tobid.OSETCustomToBidInterstitialAdapter |
| 激励视频 | com.kc.openset.third.custom.tobid.OSETCustomToBidRewardAdapter |
| 信息流 | com.kc.openset.third.custom.tobid.OSETCustomToBidNativeAdapter |
| 横幅 | com.kc.openset.third.custom.tobid.OSETCustomToBidBannerAdapter |
4、打开流量管理,在应用管理中创建聚合广告位,如已创建请忽略
5、点击聚合广告位,管理聚合广告源,添加广告源,广告网络选择奇点,代码位ID填写奇点后台申请的对应广告位ID
6、使用ToBid聚合广告位加载广告即可
重点注意
若使用原生信息流广告,需在ToBid原生聚合广告位内配置奇点广告源中添加自定义配置参数
{"isExpressAd":true}
isExpressAd=true为模版渲染,false则需要开发者做自渲染处理,如不填则默认为false需要开发者自行渲染
具体配置如下
ToBid添加自定义广告网络官方文档,点击此处
七、服务端竞价
1、获取S2SInfo()
String s2SInfo = OSETRewardVideo
.getInstance()
.setPosId(Common.getADIdReward())
.setContext(activity)
.getS2SInfo();2、加载广告
OSETRewardVideo
.getInstance()
.setPosId(Common.getADIdReward())
.setContext(activity)
.loadS2SAd(s2sToken, adLoadListener);3、广告曝光
流程与正常广告一致
