创建应用并拿到 SDK 所需的参数 AppId、广告位 ID;添加本地依赖或远程依赖;SDK 支持 Android API Level 21+。
Integration Guide
AdGain SDK 接入指南
这份指南面向已确认合作的开发者,帮助你从获取 SDK 包、配置依赖到完成广告位接入和联调验证。
Android 部分包含初始化、开屏、插屏、激励视频、原生广告、OAID 集成、权限配置与常见错误处理;
iOS 部分包含依赖导入、Xcode 配置、SDK 初始化、各广告位接入、回调处理、竞价回传和错误码说明。
请先完成隐私政策告知并取得用户同意,再初始化 SDK;SDK 包请联系商务或技术支持获取。
SDK 初始化说明
点击查看 ADSDK Demo。具体 Demo 文件由商务或技术支持在合作确认后提供。
3. 添加依赖
将本地 AAR 文件添加到项目依赖中,AAR 文件由商务或技术支持在合作确认后提供。
通过 Maven 仓库接入 SDK,并在 dependencies 中添加 com.adgain:adgain-sdk:xxx。
3.1 本地依赖
dependencies {
implementation(name: 'adgain-sdk-xxx-release', ext: 'aar')
}
3.2 远程依赖
maven {
url "http://nexus.datads.cn/repository/maven-releases"
allowInsecureProtocol = true
credentials {
username = "maven-reader"
password = "maven-reader"
}
}
dependencies {
implementation 'com.adgain:adgain-sdk:xxx'
}
4. SDK 初始化配置
// 个性化广告开关设置
AdGainSdk.getInstance().setPersonalizedAdvertisingOn(true);
Map<String, Object> customData = new HashMap<>();
customData.put("custom_key", "custom_value");
AdGainSdk.getInstance().init(this, new AdGainSdkConfig.Builder()
.appId("") //必填,向广推商务获取
.userId("") // 用户ID,有就填
.showLog(false) // 是否展示adsdk内部日志,正式环境务必为false
.addCustomData(customData) //自定义数据
.customController(new CustomController() {
// 是否允许SDK获取位置信息
@Override
public boolean canReadLocation() {
return true;
}
// 是否允许SDK获取手机信息
@Override
public boolean canUsePhoneState() {
return true;
}
// 是否允许SDK使用AndoridId
@Override
public boolean canUseAndroidId() {
return true;
}
// 是否允许SDK获取Wifi状态
@Override
public boolean canUseWifiState() {
return true;
}
// 为SDK提供oaid
@Override
public String getOaid() {
return "";
}
})
.setInitCallback(new InitCallback() {
// 初始化成功回调,初始化成功后才可以加载广告
@Override
public void onSuccess() {
Log.d(Constants.LOG_TAG, "init--------------onSuccess-----------");
}
// 初始化失败回调
@Override
public void onFail(int code, String msg) {
Log.d(Constants.LOG_TAG, "init--------------onFail-----------" + code + ":" + msg);
}
}).build());
初始化相关类说明
1. AdGainSdkConfig
com.adgain.sdk.api.AdGainSdkConfig.Builder
| 方法名 | 方法介绍 |
|---|---|
appId(String appId) | 必须,每个应用单独一个 appid。 |
showLog(boolean isLog) | sdk 是否开启 debug 日志打印信息,默认开启。 |
userId(String userId) | 用户 Id(非必填)。 |
addCustomData(Map customData) | 初始化传入的自定义数据。 |
customController(CustomController custom) | 设置自定义设备信息,具体可参考下方 CustomController 实体类。 |
setInitCallback(InitCallback callBack) | 初始化回调通知,具体可参考 InitCallback 实体类。 |
2. CustomController
com.adgain.sdk.api.CustomController
| 方法名 | 方法介绍 |
|---|---|
canReadLocation() | 是否可以读取设备位置信息。 |
getLocation() | 如果不能获取地理位置,APP 内部有获取位置信息,可在该方法回传。 |
canUsePhoneState() | 是否可以获取设备 IMEI 等信息。 |
canUseAndroidId() | 是否可以获取设备 AndroidID。 |
getImei() | 如果 canUsePhoneState 为 false,在 Android 低版本系统中获取到的 Imei 进行回传。 |
getMacAddress() | 回传 MacAddrerss 信息。 |
canUseWifiState() | 是否可以获取设备 WIFI 状态等信息。 |
String getOaid() | 传入通过信通院的 OAID 库获取到的 oaid 值。 |
3. InitCallback
com.adgain.sdk.api.InitCallback
| 方法名 | 方法介绍 |
|---|---|
void onSuccess() | sdk 初始化成功回调。 |
void onFail(int code, String msg) | sdk 初始化失败回调。 |
4. 个性化广告设置(可选)
AdGainSdk.getInstance().setPersonalizedAdvertisingOn(boolean personal);
5. 在 AndroidManifest.xml 文件中添加如下权限
<!-- 必要权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 可选权限:获取当前网络类型及状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 可选权限:仅用于获取 IMEI 或运营商信息 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 可选权限:拉新下载类广告需要 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
开屏广告
适用于 App 启动、冷热启动等高曝光入口。参考 Demo,接入代码示例可参考 Demo 中的 SplashDemoActivity 实现。
通过 SplashAdListener 接收加载成功、缓存成功、展示、点击、关闭和错误回调。
当设置开屏可点击时,需要等待跳转页面关闭后,再切换至您的主窗口。
构建 AdRequest,创建 SplashAd 并调用 loadAd()。
展示前先判断 isReady(),界面销毁时调用 destroyAd() 释放资源。
1. 接入代码示例
可参考 Demo 中的 SplashDemoActivity 实现。
1.1 设置监听回调
private final SplashAdListener mSplashAdListener = new SplashAdListener() {
@Override
public void onAdLoadSuccess() {
Log.d(Constants.LOG_TAG, "--LoadSuc:" + splashAd.isReady() + " " + splashAd.getBidPrice());
}
@Override
public void onAdCacheSuccess() {
Log.d(Constants.LOG_TAG, "----------onAdCacheSuccess-----" + splashAd.isReady());
// 展示前先判断广告是否ready
if (splashAd != null && splashAd.isReady()) {
// 执行展示广告
splashAd.showAd(getSplashContainer());
}
}
// 广告加载失败
@Override
public void onSplashAdLoadFail(AdError error) {
Log.d(Constants.LOG_TAG, "----------onSplashAdLoadFail----------" + error.toString());
gotoMainActivity();
}
@Override
public void onSplashAdShow() {
Log.d(Constants.LOG_TAG, "----------onSplashAdShow----------");
}
// 广告展示错误
@Override
public void onSplashAdShowError(AdError error) {
Log.d(Constants.LOG_TAG, "-----onSplashAdShowError----------" + error.toString());
gotoMainActivity();
}
// 广告被用户点击
@Override
public void onSplashAdClick() {
Log.d(Constants.LOG_TAG, "----onSplashAdClick----------");
}
// 广告关闭
@Override
public void onSplashAdClose(boolean isSkip) {
Log.d(Constants.LOG_TAG, "----------onSplashAdClose---------" + isSkip);
if (isForeground) {
gotoMainActivity();
} else {
// 不在前台,说明打开了广告中的链接,等回到 onResume 时再跳转
getLifecycle().addObserver(new LifecycleEventObserver() {
@Override
public void onStateChanged(LifecycleOwner source,Lifecycle.Event event) {
if (Lifecycle.Event.ON_RESUME == event) {
getLifecycle().removeObserver(this);
gotoMainActivity();
}
}
});
}
}
};
1.2 开屏广告点击注意事项
/**
* 当设置开屏可点击时,需要等待跳转页面关闭后,再切换至您的主窗口。
* 此时需要增加 isForeground 判断当前 Activity 是否在前台。
* 如果在前台,需要跳转时可以直接跳转,否则等到 回到前台时再跳转。
*/
private boolean isForeground = false;
@Override
protected void onPause() {
super.onPause();
isForeground = false;
}
@Override
protected void onResume() {
super.onResume();
isForeground = true;
}
/**
* 跳转到主 Activity
*/
private void gotoMainActivity() {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
this.finish();
}
// 开屏广告关闭通知
@Override
public void onSplashAdClose() {
if (isForeground) {
gotoMainActivity();
} else {
// 不在前台,说明打开了广告中的链接,等回到 onResume 时再跳转
getLifecycle().addObserver(new LifecycleEventObserver() {
@Override
public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
if (Lifecycle.Event.ON_RESUME == event) {
getLifecycle().removeObserver(this);
gotoMainActivity();
}
}
});
}
}
1.3 开屏广告加载
// 创建ad请求
AdRequest adRequest = new AdRequest.Builder()
.setCodeId(Constants.SPLASH_ADCOID) // 广告位ID
.setWidth(UIUtil.getScreenWidthInPx(this)) // 设置需要的广告视图宽度
.setHeight(getSplashHeight()) // 设置需要的广告视图高度
.setExtOption(new HashMap()) // 设置透传的自定义数据
.build();
// 创建开屏AD API对象,监听回调在这里设置,5 * 1000为请求广告超时时间
splashAd = new SplashAd(adRequest, mSplashAdListener, 5 * 1000);
// 加载广告
splashAd.loadAd();
1.4 开屏广告展示
// 展示前先判断广告是否ready
if (splashAd != null && splashAd.isReady()) {
splashAd.showAd(splashLY);
} else {
Log.d("TAG", "splashAd is not ready or splashAd is null");
}
1.5 开屏广告销毁
// 界面销毁时,执行销毁Ad接口
if (splashAd != null) {
splashAd.destroyAd();
splashAd = null;
}
2. 开屏 API 介绍
2.1 SplashAd
com.adgain.sdk.api.SplashAd
| 方法名 | 方法介绍 |
|---|---|
SplashAd(AdRequest adRequest, SplashAdListener adListener) | 构造方法,广告相关状态会通过 adListener 通知开发者。参数说明:adRequest(广告请求对象)、adListener(广告状态监听器)。 |
SplashAd(AdRequest adRequest, SplashAdListener adListener, long timeout) | adRequest 设置 codeId,adListener 加载及交互监听,timeout 加载超时时间。 |
void loadAd() | 请求广告。 |
boolean isReady() | 广告是否准备好,未准备好广告将无法展示。 |
void showAd(ViewGroup adContainer) | 展示广告。参数说明:adContainer(展示广告的容器不可为 null)。 |
void destroyAd() | 当广告关闭不再使用时,必须调用此方法释放资源。 |
2.2 AdRequest
com.adgain.sdk.api.AdRequest.Builder
| 方法名 | 方法介绍 |
|---|---|
setCodeId(String codeid) | 设置广告位 ID。 |
setBidFloor(int bidFloor) | 设置广告请求的底价,单位分。 |
setExtOption(Map<String,Object> option) | 设置扩展参数。参数说明:options(扩展参数,可传任意)。 |
2.3 SplashAdListener
com.adgain.sdk.api.SplashAdListener
| 方法名 | 方法介绍 |
|---|---|
void onSplashAdLoadSuccess() | 数据广告成功加载。 |
void onAdCacheSuccess() | 广告物料下载缓存成功。 |
void onSplashAdLoadFail(AdError error) | 广告加载失败。 |
void onSplashAdShow() | 曝光回调。 |
void onSplashAdClick() | 点击回调。 |
void onSplashAdShowError(AdError error) | 广告展示失败。 |
void onSplashAdClose(boolean isSkip) | 广告关闭,isSkip 标记点击跳过还是倒计时走完触发 Close。 |
插屏广告
适用于内容切换、任务完成、页面转场等自然中断场景。参考 Demo 完成加载、展示、销毁和回调监听。
设置 InterstitialAdListener,构建 AdRequest,创建 InterstitialAd 并调用 loadAd()。
展示前判断 interstitialAd != null 且 isReady()。
广告不再使用时调用 destroyAd() 并置空对象。
包含 InterstitialAd、AdRequest、InterstitialAdListener。
1. 插屏广告接入流程
参考 Demo。
1.1 插屏广告加载
InterstitialAdListener listener = new InterstitialAdListener() {
@Override
public void onInterstitialAdLoadError(AdError error) {
}
@Override
public void onInterstitialAdLoadSuccess() {
}
@Override
public void onInterstitialAdLoadCached() {
}
@Override
public void onInterstitialAdShow() {
}
@Override
public void onInterstitialAdPlayEnd() {
}
@Override
public void onInterstitialAdClick() {
}
@Override
public void onInterstitialAdClosed() {
}
@Override
public void onInterstitialAdShowError(AdError error) {
}
};
Map<String, Object> options = new HashMap<>();
options.put("inter_extra_test_key", "inter_extra_test_value");
AdRequest adRequest = new AdRequest.Builder()
.setCodeId(codeId)
.setExtOption(options)
.build();
mInterstitialAd = new InterstitialAd(adRequest, listener);
mInterstitialAd.loadAd();
1.2 插屏广告展示
if (interstitialAd != null && interstitialAd.isReady()) {
interstitialAd.showAd( activity );
}
1.3 插屏广告销毁
if (interstitialAd != null) {
interstitialAd.destroyAd();
interstitialAd = null;
}
2. 插屏 API 介绍
2.1 InterstitialAd
com.adgain.sdk.api.InterstitialAd
| 方法名 | 方法介绍 |
|---|---|
InterstitialAd(AdRequest adRequest, InterstitialAdListener adListener) | 构造方法。参数说明:request(广告请求对象)、adListener(广告状态回调监听)。 |
loadAd() | 拉取广告。 |
isReady() | 广告是否准备好,未准备好广告将无法展示。 |
showAd(Activity activity) | 展示广告。参数说明:activity(展示广告的 activity)。 |
destroyAd() | 销毁广告。 |
2.2 AdRequest
com.adgain.sdk.api.AdRequest.Builder
| 方法名 | 方法介绍 |
|---|---|
setCodeId(String codeid) | 设置广告位 ID。 |
setBidFloor(int bidFloor) | 设置广告请求的底价,单位分。 |
setExtOption(Map option) | 设置扩展参数。参数说明:options(扩展参数,可传任意)。 |
2.3 InterstitialAdListener
com.adgain.sdk.api.InterstitialAdListener
| 方法名 | 方法介绍 |
|---|---|
onInterstitialAdLoadSuccess() | 广告 server 接口请求成功。 |
onInterstitialAdLoadCached() | 广告资源缓存下载成功。 |
onInterstitialAdLoadError(AdError error) | 广告加载失败。参数说明:error(报错信息,具体可看其内部 code 和 message)。 |
onInterstitialAdShow() | 广告展示。 |
onInterstitialAdShowError(AdError error) | 广告播放出错。参数说明:error(报错信息,具体可看其内部 code 和 message)。 |
onInterstitialAdPlayEnd() | 广告播放结束。 |
onInterstitialAdClick() | 广告被点击。 |
onInterstitialAdClosed() | 广告关闭。 |
激励视频广告
适用于用户主动观看广告以获取权益、奖励或增值内容的场景。参考 Demo 完成激励视频广告加载、展示、销毁和奖励回调处理。
onRewardVerify() 作为发放奖励的关键回调,并结合自身业务服务端校验奖励状态。构建 AdRequest,创建 RewardAd 并设置 RewardAdListener。
展示前判断 rewardAd != null 且 isReady()。
广告不再使用时调用 destroyAd() 并置空对象。
包含 RewardAd、AdRequest、RewardAdListener。
1. 激励视频广告接入流程
参考 Demo。
1.1 激励视频广告加载
Map<String, Object> options = new HashMap<>();
AdRequest adRequest = new AdRequest.Builder()
.setCodeId(codeID)
.setExtOption(options)
.build();
mRewardAd = new RewardAd(adRequest, new RewardAdListener() {
@Override
public void onRewardAdLoadSuccess() {
}
@Override
public void onRewardAdLoadCached() {
}
@Override
public void onRewardAdShow() {
}
@Override
public void onRewardAdPlayStart() {
}
@Override
public void onRewardAdPlayEnd() {
}
@Override
public void onRewardAdClick() {
}
@Override
public void onRewardAdClosed() {
}
@Override
public void onRewardAdLoadError(AdError error) {
}
@Override
public void onRewardAdShowError(AdError error) {
}
@Override
public void onRewardVerify() {
}
@Override
public void onAdSkip() {
}
});
mRewardAd.loadAd();
1.2 激励视频广告展示
if (rewardAd != null && rewardAd.isReady()) {
rewardAd.showAd( activity );
}
1.3 激励视频广告销毁
if (rewardAd != null) {
rewardAd.destroyAd();
rewardAd = null;
}
2. 激励视频 API 介绍
2.1 RewardAd
com.adgain.sdk.api.RewardAd
| 方法名 | 方法介绍 |
|---|---|
RewardAd(AdRequest adRequest, RewardAdListener adListener) | 构造方法。参数说明:request(广告请求对象)、adListener(广告状态回调监听)。 |
loadAd() | 拉取广告。 |
isReady() | 广告是否准备好,未准备好广告将无法展示。 |
showAd(Activity activity) | 展示广告。参数说明:activity(展示广告的 activity)。 |
destroyAd() | 销毁广告。 |
2.2 AdRequest
com.adgain.sdk.api.AdRequest.Builder
| 方法名 | 方法介绍 |
|---|---|
setCodeId(String codeid) | 设置广告位 ID。 |
setBidFloor(int bidFloor) | 设置广告请求的底价,单位分。 |
setExtOption(Map option) | 设置扩展参数。参数说明:options(扩展参数,可传任意)。 |
2.3 RewardAdListener
com.adgain.sdk.api.RewardAdListener
| 方法名 | 方法介绍 |
|---|---|
onRewardAdLoadSuccess() | 广告 server 接口请求成功。 |
onRewardAdLoadCached() | 广告资源缓存下载成功可以展示。 |
onRewardAdLoadError(AdError error) | 广告加载失败。参数说明:error(报错信息,具体可看其内部 code 和 message)。 |
onRewardAdShow() | 广告展示。 |
onRewardAdShowError(AdError error) | 广告播放出错。参数说明:error(报错信息,具体可看其内部 code 和 message)。 |
onRewardAdPlayStart() | 广告播放开始。 |
onRewardAdPlayEnd() | 广告播放结束。 |
onRewardVerify() | 成功获得奖励。 |
onRewardAdClick() | 广告被点击。 |
onRewardAdClosed() | 广告关闭。 |
onAdSkip() | 点击广告跳过。 |
原生广告(自渲染)
注意:原生广告具体实现可参考 Demo NativeAdSimpleDemoActivity、NativeAdListDemoActivity、NativeAdRecycleDemoActivity 等。自渲染广告由 SDK 返回物料,由开发者自行适配 UI。
getAdAppInfo() 获取应用名称、开发者、包名、版本、权限列表、隐私协议等信息。设置自定义参数,构建 AdRequest,创建 NativeUnifiedAd 并调用 loadAd()。
收到 onAdLoad 回调后,通过 NativeDemoRender 渲染自定义 View。
原生广告对象不再使用时调用 destroyAd() 并置空。
包含加载监听、广告物料、交互监听、视频监听、六要素和信息流模板。
1. 接入代码示例
1.1 原生广告加载
Map<String, Object> options = new HashMap<>();
options.put("test_extra_key", "test_extra_value");
AdRequest adRequest = new AdRequest.Builder()
.setCodeId(codeId) // 设置广告位id
.setExtOption(options) // 自定义参数
.build();
// 创建广告对象
nativeAd = new NativeUnifiedAd(adRequest, new NativeAdLoadListener() {
@Override
public void onAdError( AdError error) {
Log.d(Constants.LOG_TAG, "----onAdError----------:" + error.toString());
}
@Override
public void onAdLoad( List<NativeAdData> adDataList) {
if (adDataList != null && !adDataList.isEmpty()) {
currentAdDataList = adDataList;
}
}
});
}
// 请求广告
nativeAd.loadAd();
1.2 原生广告展示
请参考 Demo 中 NativeAdUnifiedDemoActivity、NativeDemoRender 类的具体实现。
private ViewGroup adContainer;
private List<NativeAdData> currentAdDataList;
/**
* 展示广告,请在收到onAdLoad回调后再展示广告
*/
List<NativeAdData> unifiedADDataList = currentAdDataList;
if (unifiedADDataList != null && !unifiedADDataList.isEmpty()) {
NativeAdData nativeAdData = unifiedADDataList.get(0);
View view = buildView(nativeAdData);
// 媒体最终将要展示广告的容器
if (adContainer != null) {
adContainer.removeAllViews();
adContainer.addView(view);
}
} else {
logMessage("Ad is not Ready");
Log.d(Constants.LOG_TAG, "--------请先加载广告--------");
}
private View buildView(NativeAdData nativeAdData) {
//媒体自渲染的View
NativeDemoRender adRender = new NativeDemoRender(this);
View view = adRender.renderAdView(nativeAdData, new NativeAdEventListener() {
@Override
public void onAdExposed() {
Log.d(Constants.LOG_TAG, "----------onAdExposed----------");
}
@Override
public void onAdClicked() {
Log.d(Constants.LOG_TAG, "----------onAdClicked----------");
}
@Override
public void onAdRenderFail(AdError error) {
Log.d(Constants.LOG_TAG, "----------onAdRenderFail----------" + error.toString());
}
});
return view;
}
1.3 原生广告销毁
// 原生广告对象的销毁
if (nativeAd != null) {
nativeAd.destroyAd();
nativeAd = null;
}
2. 原生 API 介绍
2.1 NativeUnifiedAd
com.adgain.sdk.api.NativeUnifiedAd
| 方法名 | 方法介绍 |
|---|---|
NativeUnifiedAd(AdRequest adRequest, NativeAdLoadListener adListener) | 构造方法。参数说明:adRequest(广告请求对象)、adListener(广告状态回调对象)。 |
void loadAd() | 请求广告。 |
void destroyAd() | 销毁广告。 |
2.2 AdRequest
com.adgain.sdk.api.AdRequest.Builder
| 方法名 | 方法介绍 |
|---|---|
setCodeId(String codeid) | 设置广告位 ID。 |
setBidFloor(int bidFloor) | 设置广告请求的底价,单位分。 |
setExtOption(Map<String,Object> option) | 设置扩展参数。参数说明:options(扩展参数,可传任意)。 |
2.3 NativeAdLoadListener
com.adgain.sdk.api.NativeAdLoadListener
| 方法名 | 方法介绍 |
|---|---|
void onAdLoad(List adDataList) | 广告成功加载。参数说明:adDataList(返回的广告单元对象)。 |
void onAdError(AdError error) | 广告加载失败。参数说明:error(报错信息,具体可看其内部 code 和 message)。 |
2.4 NativeAdData
com.adgain.sdk.api.NativeAdData
| 方法名 | 方法介绍 |
|---|---|
String getCTAText() | 获取创意按钮文案。 |
String getTitle() | 获取广告的 Tittle。 |
String getDesc() | 获取广告的描述。 |
String getAdLogo() | 获取广告的 Logo。 |
String getIconUrl() | 获取广告的 Icon。 |
List<ADGainImage> getImageList() | 获取广告的图片信息集合:ADGainImage 对象中的宽、高、url 等。 |
View getWidgetView(int width, int height) | 获取广告的互动组件 View。 |
int getAdPatternType() | 获取广告样式。取值范围:NativeAdPatternType.NATIVE_UNKNOWN、NativeAdPatternType.NATIVE_BIG_IMAGE_AD、NativeAdPatternType.NATIVE_VIDEO_AD、NativeAdPatternType.NATIVE_GROUP_IMAGE_AD。 |
int getAdInteractiveType() | 获取广告交互类型。取值范围:NativeAdInteractiveType.NATIVE_UNKNOWN、NativeAdInteractiveType.NATIVE_BROWSER、NativeAdInteractiveType.NATIVE_DEEP_LINK、NativeAdInteractiveType.NATIVE_DOWNLOAD。 |
AdAppInfo getAdAppInfo() | 获取下载类广告六要素信息,媒体可根据需要自行展示。 |
void startVideo() | 播放视频广告。 |
void pauseVideo() | 暂停视频广告。 |
void resumeVideo() | 恢复视频广告。 |
void stopVideo() | 停止视频广告。 |
int getVideoWidth() | 获取视频广告宽。 |
int getVideoHeight() | 获取视频广告高。 |
View getFeedView() | 获取信息流模板 View。 |
void destroy() | 销毁广告单元对象。 |
void bindViewForInteraction(View view, List clickableViews, NativeAdEventListener nativeAdEventListener) | 绑定广告交互的方法。参数说明:view(自渲染的根 View)、clickableViews(可点击的 View 的列表)、nativeAdEventListener(广告交互监听回调对象)。 |
void bindMediaView(ViewGroup mediaLayout, NativeAdMediaListener nativeAdMediaListener) | 绑定视频 Video 方法。参数说明:mediaLayout(装 video 的容器)、nativeADMediaListener(视频播放监听回调对象)。 |
void setNativeAdEventListener(NativeAdEventListener nativeAdEventListener) | 信息流模板监听交互回调。 |
void setNativeAdMediaListener(NativeAdMediaListener nativeAdMediaListener) | 信息流模板监听视频播放状态。 |
2.5 NativeAdEventListener
com.adgain.sdk.api.NativeAdEventListener
| 方法名 | 方法介绍 |
|---|---|
void onAdExposed() | 广告曝光。 |
void onAdClicked() | 广告点击。 |
void onAdRenderFail(AdError error) | 广告展示失败。参数说明:error(报错信息,具体可看其内部 code 和 message)。 |
2.6 NativeAdMediaListener
com.adgain.sdk.api.NativeAdData.NativeAdMediaListener
| 方法名 | 方法介绍 |
|---|---|
void onVideoLoad() | 视频加载成功。 |
void onVideoError(AdError error) | 视频播放失败。参数说明:error(报错信息,具体可看其内部 code 和 message)。 |
void onVideoStart() | 视频开始播放。 |
void onVideoPause() | 视频暂停播放。 |
void onVideoResume() | 视频恢复播放。 |
void onVideoCompleted() | 视频完成播放。 |
2.7 安卓下载应用六要素信息
com.adgain.sdk.api.AdAppInfo
由于国内监管部门要求,在安卓下载类广告中,需要给用户披露下载的应用的六要素信息。开发者可以通过 getAdAppInfo() 方法获取。六要素信息包括:
| 方法名 | 方法介绍 |
|---|---|
String getAppName() | 获取应用名称。 |
String getAuthorName() | 获取开发者公司名称。 |
String getPackageName() | 获取开发者应用包名。 |
int getAppSize() | 获取应用大小。 |
String getVersionName() | 获取应用版本号。 |
Stirng getDeveloper() | 获取应用的开发者名称。 |
String getPermissionsUrl() | 获取应用权限列表 URL,以 WebView 渲染。 |
String getPrivacyUrl() | 获取应用隐私协议 URL,以 WebView 渲染。 |
String getAppDescriptionUrl() | 获取应用功能描述 URL,以 WebView 渲染。 |
2.8 信息流模板
通过 getFeedView 判断是否为信息流模板,View 不为空则为信息流模板。
信息流模板通过 setNativeAdEventListener 和 setNativeAdMediaListener 对信息流模板进行监听。
OAID SDK 集成说明
Android 10 无法通过常规方式获取 IMEI 等设备 ID,对广告的加载、展示等业务有一定影响。
把 oaid_sdk_x.x.x.aar 拷贝到项目的 libs 目录,并设置依赖,其中 x.x.x 代表版本号。
设置 gradle 编译选项,可以根据自己对平台的选择进行合理配置。
信息码引用 InfoCode 类,可结合 Logcat 排查接入状态。
1. Android 10 OAID 描述
Android 10 无法通过常规方式获取 IMEI 等设备 ID,对广告的加载、展示等业务有一定影响。建议开发者集成 OAID,并在 GTAdSdk 设置 customController 时,为 SDK 提供 OAID。详细的集成方式可以参看 MSA 联盟官网 提供的开发者文档。
2. 引入依赖
把 oaid_sdk_x.x.x.aar 拷贝到项目的 libs 目录,并设置依赖,其中 x.x.x 代表版本号。
implementation files('libs/oaid_sdk_x.x.x.aar')
3. gradle 配置
设置 gradle 编译选项,这里可以根据自己对平台的选择进行合理配置。
ndk {
abiFilters 'armeabi-v7a','x86','arm64-v8a','x86_64','armeabi'
}
packagingOptions {
doNotStrip "*/armeabi-v7a/*.so"
doNotStrip "*/x86/*.so"
doNotStrip "*/arm64-v8a/*.so"
doNotStrip "*/x86_64/*.so"
doNotStrip "armeabi.so"
}
4. 混淆设置
现 SDK 支持 oaid_sdk_1.0.10、1.0.13、1.0.22、1.0.23、1.0.25、1.0.30、1.1.0、1.2.0、1.2.1、2.0.0、2.1.0、2.2.0 等版本,但是媒体必须按照以下混淆配置进行设置。
# 1.0.25 之后
# sdk
-keep class com.bun.miitmdid.** { *; }
-keep interface com.bun.supplier.** { *; }
# asus
-keep class com.asus.msa.SupplementaryDID.** { *; }
-keep class com.asus.msa.sdid.** { *; }
# freeme
-keep class com.android.creator.** { *; }
-keep class com.android.msasdk.** { *; }
# huawei
-keep class com.huawei.hms.ads.** { *; }
-keep interface com.huawei.hms.ads.** {*; }
# lenovo
-keep class com.zui.deviceidservice.** { *; }
-keep class com.zui.opendeviceidlibrary.** { *; }
# meizu
-keep class com.meizu.flyme.openidsdk.** { *; }
# nubia
-keep class com.bun.miitmdid.provider.nubia.NubiaIdentityImpl { *; }
# oppo
-keep class com.heytap.openid.** { *; }
# samsung
-keep class com.samsung.android.deviceidservice.** { *; }
# vivo
-keep class com.vivo.identifier.** { *; }
# xiaomi
-keep class com.bun.miitmdid.provider.xiaomi.IdentifierManager { *; }
# zte
-keep class com.bun.lib.** { *; }
# coolpad
-keep class com.coolpad.deviceidsupport.** { *; }
# 1.0.25 之前
-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>;}
5. 错误码
信息码(引用 InfoCode 类)。
| 信息 | 值 | 说明 |
|---|---|---|
INIT_INFO_RESULT_OK | 1008610 | 调用成功,获取接口是同步的。 |
INIT_INFO_RESULT_DELAY | 1008614 | 调用成功,获取接口是异步的。 |
INIT_ERROR_CERT_ERROR | 1008616 | 证书未初始化或证书无效。 |
INIT_ERROR_MANUFACTURER_NOSUPPORT | 1008611 | 不支持的厂商。 |
INIT_ERROR_DEVICE_NOSUPPORT | 1008612 | 不支持的设备。 |
INIT_ERROR_LOAD_CONFIGFILE | 1008613 | 加载配置文件出错。 |
INIT_ERROR_SDK_CALL_ERROR | 1008615 | SDK 调用出错。 |
如何检验 OAID 接入成功
MdIdSdkHelper 关键字。错误码与常见问题
优先检查 AppId、初始化时机、网络权限与用户隐私授权状态。
展示前必须判断 isReady(),并在缓存成功后再调用展示方法。
请确认 Manifest 权限、系统授权与 CustomController 配置一致。
请按监管要求披露下载应用六要素信息,必要时使用 getAdAppInfo()。
错误码信息说明
1. ADGainSDK 错误码信息说明
相关错误信息可参考此翻译表。
| ErrorCode | ErrorMessage | 备注 |
|---|---|---|
100000 | sdk 未初始化 | 发起广告请求时未初始化 sdk。 |
100100 | sdk 初始化失败 | SDK 初始化失败,请查看初始化失败回调信息。 |
100200 | 广告位 ID 为空 | 发起广告请求时,广告位 ID 为必传参数。 |
100201 | 广告加载超时 | SDK 请求广告超时,请检查网络环境。 |
100202 | 广告正在加载中,请稍后再加载 | 同一个广告对象正在加载中,还没有结果,又发起广告请求。 |
100203 | 广告个性化开关被关闭,请开启个性化开关 | 请开启广告个性化推荐开关。 |
100204 | 下发广告请求出错 | 广告请求出错,具体请查看错误信息里面的 message。 |
100205 | 网络异常 | 当前设备网络异常,请检查设备网络连接。 |
100206 | 广告资源文件下载错误 | 广告资源文件下载失败。 |
100207 | 内部错误,请联系运营或技术人员 | 内部错误,如遇此报错联系技术支持。 |
100208 | server 下发的广告缺失关键信息 | server 下发的广告内容缺失关键信息。 |
100300 | 广告播放出错 | 广告展示异常,具体内容请查看回调中的错误信息。 |
100301 | 广告视频播放出错 | 广告视频播放失败,具体内容请查看回调中的错误信息。 |
100302 | 广告未 ready | 广告未 ready,当前没有 ready 的广告可以展示。 |
100303 | 广告容器不能为 null | 展示广告的容器不能为 null。 |
100304 | 广告容器只允许为 ViewGroup 类型 | 展示广告容器只允许为 ViewGroup 类型。 |
100305 | 广告 Activity 不能为 null | 展示广告的 Activity 不能为 null。 |
117 | 无广告填充 | 正常报错,该次请求无广告填充。 |
常见集成问题
1. targetSdkVersion 28 以上 http 支持
</manifest>
<application
android:networkSecurityConfig="@xml/network_security_config"
android:usesCleartextTraffic="true">
</manifest>
network_security_config.xml 文件配置:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true"/>
</network-security-config>
2. 系统 installProvider 失败或者开启 MultiDex 导致的 Not find Class
参考链接 https://developer.android.com/studio/build/multidex
android {
buildTypes {
release {
multiDexKeepProguard file('multidex-config.pro')
...
}
}
}
3. 方法数 65k 问题解决
参考链接 https://developer.android.com/studio/build/multidex
build.gradle 配置:
defaultConfig {
multiDexEnabled true
}
dependencies {
//AndroidX
implementation "androidx.multidex:multidex:2.0.1"
//非AndroidX
implementation 'com.android.support:multidex:1.0.3'
}
修改 MyAppcation 继承 MultiDexApplication:
public class MyAppcation extends MultiDexApplication {
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}
}
4. AndroidX 与 Android support 冲突
在项目根目录下文件 gradle.properties,添加以下代码:
android.enableJetifier=true
android.useAndroidX=true
iOS 接入概览
注意:
- 本 SDK 最低兼容
iOS12.0,支持架构:x86_64, arm64 - 竞胜竞败回传:AdGain平台根据媒体传回来的竞胜竞败价格,通过相应算法自动提高出价来获得广告曝光,媒体RTB时一定要调用,否则会导致价格出不上去。
- 官网后台:https://gdsmilemg.datads.cn/
iOS测试ID
- appid:11000637
- 开屏:11002204
- 插屏:11002205
- 激励:11002208
- 原生:11002207
- 信息流视频ID: 11002230
一、导入SDK依赖
cocoapods导入
在podflie中添加如下配置
#version 以最新版本为准
pod 'AdGainSDK', 'version'
然后在终端执行pod install命令
手动导入framework文件
在AdGainSDK路径下的AdGainSDK.xcframework和AdGainSDK.bundle拖入到项目中,AdGainSDK.xcframework文件结构如下
AdGainSDK.xcframework
├── ios-arm64
│ └── AdGainSDK.framework
│ ├── _CodeSignature
│ ├── AdGainSDK
│ ├── Headers
│ └── Modules
└── ios-arm64_x86_64-simulator
└── AdGainSDK.framework
├── _CodeSignature
├── AdGainSDK
├── Headers
└── Modules
Xcode、App项目配置
Other Linker Flags
在Xcode中选择项目的Targets->Build Settings,配置Other Linker Flags 增加 -ObjC
添加IDFA权限
该权限为非必须权限,sdk不会主动请求授权,需要开发者自行申请用户授权 在app工程info.plist中增加权限说明:
<key>NSUserTrackingUsageDescription</key>
<string>获取idfa用于个性化广告推送</string>
在代码中获取idfa权限:
if (@available(iOS 14, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
}];
}
添加定位权限
该权限为非必须权限,sdk不会主动请求授权,需要开发者自行申请用户授权 在app工程info.plist中增加权限说明:
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>获取location用于个性化广告推送</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>获取location用于个性化广告推送</string>
在合适的时候获取定位权限授权
_locationManager = [[CLLocationManager alloc] init];
[_locationManager requestWhenInUseAuthorization];
添加HTTP支持
在app工程info.plist中增加配置:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
添加依赖库
如果手动导入sdk,需要添加系统依赖库,在TARGETS-General-Frameworks, Libraries, and Embedded Content中点击+号,依次添加下列库:
- sqlite3
- xml2
- z
- SystemConfiguration
- CoreGraphics
- Foundation
- UIKit
- AdSupport
- StoreKit
- QuartzCore
- CoreTelephony
- MobileCoreServices
- Accelerate
- AVFoundation
- WebKit
二、SDK初始化
代码示例
@import AdGainSDK;
[AdGainSDKConfig startWithAppId:@"App ID" completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
// 初始化成功
} else {
// 初始化失败
}
}];
初始化类AdGainSDKConfig相关说明
| 方法名 | 方法说明 |
|---|---|
| + (void)setPersonalizedState:(NSInteger)state; | 设置是否允许个性化广告推送,默认允许,1为不允许,其他值为允许 |
| + (void)setShakeAdState:(BOOL)state; | 设置是否允许摇一摇广告,默认允许,state:YES允许,NO不允许 |
| + (void)setUserId:(NSString *)userId; | 设置开发者App用户系统用户id |
| + (void)setSDKDebugable:(BOOL)debugable; | 是否允许打印控制台日志 |
| + (void)setCustomPrivacyDelegate:(id<AdGainPrivacyDelegate>)delegate; | 隐私信息获取控制类 |
| + (void)setSDKExtraSetting:(NSDictionary *)extra; | 设置SDK扩展参数 |
隐私信息获取控制协议AdGainPrivacyDelegate说明
| 方法名 | 方法说明 |
|---|---|
| - (BOOL)adGainCanUseIdfa; | 是否允许获取idfa |
| - (NSString *)adGainGetIdfa; | 开发者自行获取idfa传入 |
| - (BOOL)adGainCanUseLocation; | 是否允许获取定位信息 |
| - (AdGainLocation *)adGainGetLocation; | 开发者自行获取定位信息传入 |
三、开屏广告
代码示例
@import AdGainSDK;
@interface AdGainDemoSplashViewController ()<AdGainSplashAdDelegate>
@property (nonatomic, strong) AdGainSplashAd *splashAd;
@end
- (void)loadAd {
AdGainAdRequest *request = [[AdGainAdRequest alloc] init];
request.codeId = @"codeId";
_splashAd = [[AdGainSplashAd alloc] initWithAdRequest:request];
_splashAd.delegate = self;
[_splashAd loadAd];
}
- (void)showAd {
[_splashAd showAdFromViewController:self];
}
AdGainSplashAd属性、方法说明
| 方法、属性名 | 方法说明 |
|---|---|
| id<AdGainSplashAdDelegate/>delegate | 回调delegate |
| UIView *bottomView | 自定义底部视图,需设置frame,自定义视图高度不可超出屏幕高度的35% |
| - (void)loadAd; | 加载广告 |
| - (void)showAdFromViewController:(UIViewController *)viewController; | 展示开屏广告 |
AdGainSplashAdDelegate回调方法说明
| 方法名 | 方法说明 |
|---|---|
| -adGainSplashAdDidLoad: | 广告数据加载成功 |
| -adGainSplashAd:loadFailWithError: | 广告加载失败 |
| -adGainSplashAdContentDidLoad: | 广告素材(图片、视频)下载成功,建议在此回调中调用show方法 |
| -adGainSplashAd:contentLoadFailWithError: | 广告素材加载失败 |
| -adGainSplashAdDidShow: | 广告展示成功 |
| -adGainSplashAd:showFailWithError: | 广告展示失败 |
| -adGainSplashAdDidClick: | 广告点击 |
| -adGainSplashAdDidSkip: | 广告点击跳过 |
| -adGainSplashAdDidClose: | 广告关闭,倒计时结束后自动关闭 |
| -adGainSplashAdWillShowLandingPage: | 应用内落地页viewController将要展示 |
| -adGainSplashAdDidShowLandingPage: | 应用内落地页viewController已经展示 |
| -adGainSplashAdWillCloseLandingPage: | 应用内落地页viewController将要消失 |
| -adGainSplashAdDillCloseLandingPage: | 应用内落地页viewController已经消失 |
四、插屏广告
代码示例
@import AdGainSDK;
@interface AdGainDemoInterstitialViewController ()<AdGainInterstitialAdDelegate>
@property (nonatomic, strong) AdGainInterstitialAd *ad;
@end
- (void)loadAd {
AdGainAdRequest *request = [[AdGainAdRequest alloc] init];
request.codeId = @"codeId";
_ad = [[AdGainInterstitialAd alloc] initWithAdRequest:request];
_ad.delegate = self;
[_ad loadAd];
}
- (void)showAd {
[_ad showAdFromViewController:self];
}
AdGainInterstitialAd属性、方法说明
| 方法、属性名 | 方法说明 |
|---|---|
| id<AdGainInterstitialAdDelegate/> delegate | 回调delegate |
| - (void)loadAd; | 加载广告 |
| - (void)showAdFromViewController:(UIViewController *)viewController; | 展示开屏广告 |
AdGainInterstitialAdDelegate回调方法说明
| 方法名 | 方法说明 |
|---|---|
| -adGainInterstitialAdDidLoad: | 广告数据加载成功 |
| -adGainInterstitialAd:loadFailWithError: | 广告加载失败 |
| -adGainInterstitialAdContentDidLoad: | 广告素材(图片、视频)下载成功,建议在此回调中调用show方法 |
| -adGainInterstitialAd:contentLoadFailWithError: | 广告素材加载失败 |
| -adGainInterstitialAdDidShow: | 广告展示成功 |
| -adGainInterstitialAd:showFailWithError: | 广告展示失败 |
| -adGainInterstitialAdDidClick: | 广告点击 |
| -adGainInterstitialAdDidClose: | 广告关闭 |
| -adGainInterstitialAdWillShowLandingPage: | 应用内落地页viewController将要展示 |
| -adGainInterstitialAdDidShowLandingPage: | 应用内落地页viewController已经展示 |
| -adGainInterstitialAdWillCloseLandingPage: | 应用内落地页viewController将要消失 |
| -adGainInterstitialAdDillCloseLandingPage: | 应用内落地页viewController已经消失 |
五、激励广告
代码示例
@import AdGainSDK;
@interface AdGainDemoRewardViewController ()<AdGainRewardAdDelegate>
@property (nonatomic, strong) AdGainRewardAd *ad;
@end
- (void)loadAd {
AdGainAdRequest *request = [[AdGainAdRequest alloc] init];
request.codeId = @"codeId";
_ad = [[AdGainRewardAd alloc] initWithAdRequest:request];
_ad.delegate = self;
[_ad loadAd];
}
- (void)showAd {
[_ad showAdFromViewController:self];
}
AdGainRewardAd属性、方法说明
| 方法、属性名 | 方法说明 |
|---|---|
| id<AdGainRewardAdDelegate> delegate | 回调delegate |
| - (void)loadAd; | 加载广告 |
| - (void)showAdFromViewController:(UIViewController *)viewController; | 展示开屏广告 |
AdGainRewardAdDelegate回调方法说明
| 方法名 | 方法说明 |
|---|---|
| -adGainRewardAdDidLoad: | 广告数据加载成功 |
| -adGainRewardAd:loadFailWithError: | 广告加载失败 |
| -adGainRewardAdContentDidLoad: | 广告素材(图片、视频)下载成功,建议在此回调中调用show方法 |
| -adGainRewardAd:contentLoadFailWithError: | 广告素材加载失败 |
| -adGainRewardAdDidShow: | 广告展示成功 |
| -adGainRewardAd:showFailWithError: | 广告展示失败 |
| -adGainRewardAdVideoStart: | 广告视频开始播放 |
| -adGainRewardAdVideoFinish: | 广告视频播放完毕 |
| -adGainRewardAdDidClick: | 广告点击 |
| -adGainRewardAd:didRewardEffective: | 可以发放奖励 |
| -adGainRewardAdDidClose: | 广告关闭 |
| -adGainRewardAdWillShowLandingPage: | 应用内落地页viewController将要展示 |
| -adGainRewardAdDidShowLandingPage: | 应用内落地页viewController已经展示 |
| -adGainRewardAdWillCloseLandingPage: | 应用内落地页viewController将要消失 |
| -adGainRewardAdDillCloseLandingPage: | 应用内落地页viewController已经消失 |
六、信息流广告
代码示例
@import AdGainSDK;
@interface AdGainNativeAdViewController ()<AdGainNativeAdDelegate>
@property (nonatomic, strong) AdGainNativeAd *ad;
@end
- (void)loadAd {
AdGainAdRequest *request = [[AdGainAdRequest alloc] init];
request.codeId = @"codeId";
_ad = [[AdGainNativeAd alloc] initWithAdRequest:request];
_ad.delegate = self;
[_ad loadAd];
}
AdGainNativeAd属性、方法说明
| 方法、属性名 | 方法说明 |
|---|---|
| AdGainNativeAdData *adData; | 自渲染广告物料信息对象 |
| id<AdGainNativeAdDelegate> delegate; | 回调 |
| BOOL expressAd; | 是否是原生模版广告,当前版本仅支持原生自渲染 |
| - (void)loadAd; | 加载广告 |
| AdGainPlayerControlStatus playerStatus; | 当前视频播放状态 |
| BOOL muted; | 是否静音 |
| - (void)play; | 播放 |
| - (void)pause; | 暂停 |
| - (void)stop; | 停止播放(暂停并seek到视频最后一帧) |
AdGainNativeAdDelegate回调方法说明
| 方法名 | 方法说明 |
|---|---|
| -adGainNativeAdDidLoad: | 广告数据加载成功 |
| -adGainNativeAd:loadFailWithError: | 广告加载失败 |
| -adGainNativeAdContentDidLoad: | 广告素材(图片、视频)下载成功,建议在此回调中调用show方法 |
| -adGainNativeAd:contentLoadFailWithError: | 广告素材加载失败 |
| -adGainNativeAdDidShow: | 广告展示成功 |
| -adGainNativeAd:showFailWithError: | 广告展示失败 |
| -adGainNativeAdDidClick: | 广告点击 |
| -adGainNativeAdWillShowLandingPage: | 应用内落地页viewController将要展示 |
| -adGainNativeAdDidShowLandingPage: | 应用内落地页viewController已经展示 |
| -adGainNativeAdWillCloseLandingPage: | 应用内落地页viewController将要消失 |
| -adGainNativeAdDillCloseLandingPage: | 应用内落地页viewController已经消失 |
| -adGainNativeAd:videoPlayStatusDidChange: | 视频类型广告,视频播放状态发生变化(ready, play, pause, finish) |
| -adGainNativeAd:videoPlayTimeDidChange: | 视频播放进度变化,单位s |
AdGainPlayerControlStatus视频状态枚举说明
| case | 说明 |
|---|---|
| AdGainPlayerControlStatusNone = 0 | 初始值 |
| AdGainPlayerControlStatusReady = 1 | 视频可播放 |
| AdGainPlayerControlStatusPlaying = 2 | 开始播放 |
| AdGainPlayerControlStatusPaused = 3 | 暂停 |
| AdGainPlayerControlStatusFinish = 4 | 播放完成 |
信息流自渲染广告
AdGainNativeAdData属性说明
| 属性名 | 属性说明 |
|---|---|
| AdGainAdMaterialType materialType; | 原生广告素材类型 |
| NSArray<AdGainNativeAdImage *> *images; | 图片数组 |
| AdGainNativeAdVideo *video; | 视频 |
| NSString *title; | 标题 |
| NSString *desc; | 描述 |
| NSString *ctaText; | callToAction标题文字 |
| AdGainNativeAdImage *iconImage; | icon图片 |
| UIImage *adGainLogoImage; | AdGainSDK广告logo |
| AdGainNativeAdAppInfo *appInfo; | 下载类型广告的app信息 |
AdGainAdMaterialType素材类型枚举说明
| case | 说明 |
|---|---|
| AdGainAdMaterialTypeOneImage | 单张图片 |
| AdGainAdMaterialTypeVideo | 视频类型 |
| AdGainAdMaterialTypeGroupImage | 多张图片 |
AdGainNativeAdImage图片类型属性说明
| 属性名 | 属性说明 |
|---|---|
| NSInteger width; | 宽度,可能为0 |
| NSInteger height; | 高度,可能为0 |
| NSString *url; | 图片url |
| UIImage *image; | 图片,可以优先判定此属性是否为空,不为空则可以直接使用,如果为空再使用url进行加载 |
AdGainNativeAdVideo视频类型属性说明
| 属性名 | 属性说明 |
|---|---|
| NSInteger width; | 宽度,可能为0 |
| NSInteger height; | 高度,可能为0 |
| NSString *url; | 视频url |
| NSString *coverUrl; | 视频背景图片url |
| UIImage *coverImage; | 视频背景图片,可以优先判定此属性是否为空,不为空则可以直接使用,如果为空再使用url进行加载 |
| NSTimeInterval duration; | 视频长度,单位s |
AdGainNativeAdAppInfoapp信息类型属性说明
| 属性名 | 属性说明 |
|---|---|
| NSString *appName; | 应用名 |
| NSString *brandName; | 应用品牌名 |
| NSString *packageName; | 应用包名 |
| NSInteger appSize; | 应用大小 bit |
| NSString *appVersion; | 应用版本 |
| NSString *developer; | 应用开发者 |
| NSString *privacyURL; | 隐私协议 |
| NSString *permissionURL; | 用户权限 |
| NSString *appDesc; | 应用描述 |
| NSString *appDescURL; | 应用描述地址 |
AdGainNativeAdView信息流自渲染view类型说明 用于原生自渲染广告的展示,此view可以通过registerNativeAd和unregisterNativeAd进行复用。 属性和方法说明:
| 属性、方法名 | 说明 |
|---|---|
| BOOL ctrlVideoPlay; | 是否由sdk控制视频素材的播放暂停等操作,默认YES,设置为NO后,媒体需要完全自行控制视频的播放暂停等操作 |
| UIView *videoView; | 视频组件,调用registerNativeAd:方法后,如果为视频类型,此属性不为空, 需要开发者自行判断将其添加到布局中 |
| UIView *logoView; | AdGainAdSDK的logoView |
| UIView *shakeView; | 摇一摇交互组件,调用registerContainerView,传入不为空的containerView后,shakeView会被自动添加到containerView上 |
| UIViewController *viewController; | 所在viewController,广告基于此viewController进行应用内落地页跳转,若不传或传空会影响广告收益 |
| AdGainNativeAd *ad; | 调用registerNativeAd:后此属性有值 |
| - (void)registerNativeAd:(AdGainNativeAd *)ad; | 注册原生广告对象 |
| - (void)registerContainerView:(UIView *)containerView; | 设置广告容器View |
| - (void)registerClickViews:(NSArray<UIView *> *)clickViews; | 设置可点击视图 |
| - (void)unregisterNativeAd; | 取消注册原生广告对象 |
七、广告竞价和基础方法
| 方法名 | 说明 |
|---|---|
| - (instancetype)initWithAdRequest:(AdGainAdRequest *)adRequest; | 构造方法,传入AdGainAdRequest类型对象 |
| - (BOOL)isReady; | 广告是否可用 |
| - (nullable NSDictionary *)getExtraInfo; | 获取广告加载信息,当前支持的key包括 codeId 广告位id,loadId 本次广告生命周期唯一标识 |
| - (NSInteger)ecpm; | 获取价格,单位为分,只有广告加载成功后,此方法才会有值 |
| - (void)sendLossNotification:(NSDictionary<AdGainSDKBidOption, id> *)info; | 竞价失败回传,需要回传所用聚合平台AdGainSDKBidMediation和胜出价格AdGainSDKBidWinPrice |
| - (void)sendWinNotification:(NSDictionary<AdGainSDKBidOption, id> *)info; | 竞价胜出回传,需要回传所用聚合平台AdGainSDKBidMediation、最高价AdGainSDKBidExpectCostPrice、二价AdGainSDKBidHighestLossPrice |
AdGainAdRequest属性说明
| 属性名 | 说明 |
|---|---|
| NSString *codeId; | 广告位ID |
| NSInteger bidFloor; | 广告请求的底价,单位为分 |
| NSDictionary *extOptions; | 扩展参数 |
竞价回传key-value说明
| 键名 | 说明 |
|---|---|
| AdGainSDKBidMediation | 所用聚合平台 |
| AdGainSDKBidExpectCostPrice | 最高价 |
| AdGainSDKBidHighestLossPrice | 二价 |
| AdGainSDKBidWinPrice | 胜出价格 |
八、错误码和常见问题
错误码说明
| 错误码 | 说明 |
|---|---|
| AdGainSDKErrorSDKNotInit = 100000, | sdk未初始化 |
| AdGainSDKErrorSDKInitFail = 100100, | sdk初始化失败 |
| AdGainSDKErrorAdCodeIdEmpty = 100200, | 广告位ID为空 |
| AdGainSDKErrorAdLoadTimeout = 100201, | 广告加载超时 |
| AdGainSDKErrorAdInLoading = 100202, | 广告正在加载中,请稍后再加载 |
| AdGainSDKErrorAdRequestLimit = 100203, | 广告请求频次已达上限 |
| AdGainSDKErrorAdRequestError = 100204, | 广告请求出错 |
| AdGainSDKErrorAdRequestNetworkError = 100205, | 网络异常 |
| AdGainSDKErrorAdContentDownloadFail = 100206, | 广告资源文件下载错误 |
| AdGainSDKErrorAdBadRequest = 100207, | 内部错误,请联系运营或技术人员 |
| AdGainSDKErrorAdResponseInformationLoss = 100208, | server下发的广告缺失关键信息 |
| AdGainSDKErrorAdException = 100209, | 加载异常 |
| AdGainSDKErrorAdPlayError = 100300, | 广告播放出错 |
| AdGainSDKErrorAdVideoPlayFail = 100301, | 广告视频播放出错 |
| AdGainSDKErrorAdNotReady = 100302, | 广告未ready |
| AdGainSDKErrorAdNotValid = 100307, | 广告已过有效期 |
| AdGainSDKErrorAdViewControllerIsNull = 100305, | 广告viewController不能为nil |
| AdGainSDKErrorAdIsVisibility = 100306, | 广告容器展示异常 |
| AdGainSDKErrorAdNoResponse = 117, | 无广告填充 |
AdGain