前言:产品让接个广告,之前没听说过,查了一下,看完文档,跟客服聊了聊。现状是:目前广点通不接受自渲染模式的广告,只能接入模板形式的。而自渲染和模板的代码是不一样的,需要注意。
- 注册地址:联盟开发者门户
- 流量合作——我的媒体——新建媒体
- 流量合作——我的广告位——新建广告位(对照示意图,建自己需要的类型)
- 下载中心——SDK下载(这里有开发文档还是挺不错的,该有的都有了,自己看细节。具体代码可参照demo,由于代码是eclipse的,所以这里记录下studio的写法)
- 以原生模板为例:
private NativeExpressAD nativeExpressAD;
private NativeExpressADView nativeExpressADView;
public void refreshAd(Activity mContext) {
try {
// 这里的Context必须为Activity
nativeExpressAD = new NativeExpressAD(mContext, getMyADSize(), Constants.APPID, Constants.NativePosID, new NativeExpressAD.NativeExpressADListener() {
@Override
public void onNoAD(AdError adError) {
Log.i(
TAG,
String.format("onNoAD, error code: %d, error msg: %s", adError.getErrorCode(),
adError.getErrorMsg()));
}
@Override
public void onADLoaded(List<NativeExpressADView> adList) {
Log.i(TAG, "onADLoaded: " + adList.size());
// 释放前一个展示的NativeExpressADView的资源
if (nativeExpressADView != null) {
nativeExpressADView.destroy();
}
if (gdtAd.getVisibility() != View.VISIBLE) {
gdtAd.setVisibility(View.VISIBLE);
}
if (gdtAd.getChildCount() > 0) {
gdtAd.removeAllViews();
}
nativeExpressADView = adList.get(0);
Log.i(TAG, "onADLoaded, video info: " + getAdInfo(nativeExpressADView));
// 广告可见才会产生曝光,否则将无法产生收益。
gdtAd.addView(nativeExpressADView);
nativeExpressADView.render();
}
@Override
public void onRenderFail(NativeExpressADView adView) {
Log.i(TAG, "onRenderFail");
}
@Override
public void onRenderSuccess(NativeExpressADView adView) {
Log.i(TAG, "onRenderSuccess");
}
@Override
public void onADExposure(NativeExpressADView adView) {
Log.i(TAG, "onADExposure");
}
@Override
public void onADClicked(NativeExpressADView adView) {
Log.i(TAG, "onADClicked");
}
@Override
public void onADClosed(NativeExpressADView adView) {
Log.i(TAG, "onADClosed");
// 当广告模板中的关闭按钮被点击时,广告将不再展示。NativeExpressADView也会被Destroy,释放资源,不可以再用来展示。
if (gdtAd != null && gdtAd.getChildCount() > 0) {
gdtAd.removeAllViews();
gdtAd.setVisibility(View.GONE);
}
}
@Override
public void onADLeftApplication(NativeExpressADView adView) {
Log.i(TAG, "onADLeftApplication");
}
@Override
public void onADOpenOverlay(NativeExpressADView adView) {
Log.i(TAG, "onADOpenOverlay");
}
@Override
public void onADCloseOverlay(NativeExpressADView adView) {
Log.i(TAG, "onADCloseOverlay");
}
});
nativeExpressAD.loadAD(1);
} catch (NumberFormatException e) {
Log.w(TAG, "ad size invalid.");
}
}
private ADSize getMyADSize() {
int w = ADSize.FULL_WIDTH;
int h = ADSize.AUTO_HEIGHT;
return new ADSize(w, h);
}
/**
* 获取广告数据
*
* @param nativeExpressADView
* @return
*/
private String getAdInfo(NativeExpressADView nativeExpressADView) {
AdData adData = nativeExpressADView.getBoundData();
if (adData != null) {
StringBuilder infoBuilder = new StringBuilder();
infoBuilder.append("title:").append(adData.getTitle()).append(",")
.append("desc:").append(adData.getDesc()).append(",")
.append("patternType:").append(adData.getAdPatternType());
return infoBuilder.toString();
}
return null;
}
/**
* 在页面销毁时调用 destroy
*/
public void cancleADView() {
// 使用完了每一个NativeExpressADView之后都要释放掉资源
if (nativeExpressADView != null) {
nativeExpressADView.destroy();
}
}
这段代码可写在任意位置,只需传入activity就行;其中缺乏参数如下
//广点通广告 要绑定
private ViewGroup gdtAd;
<!--广点通广告 在需要的xml中加入,位置随便放-->
<FrameLayout
android:id="@+id/gdt_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
/**
* 广点通常量
*/
public static final String APPID = "110******"; // 广点通媒体id
public static final String NativePosID = "707044********"; //广告位ID 左图右字
完成: