android 广告库sdk,GitHub - adxdata/sdk-android-demo: 美数广告SDK(Android)示例

目录

依赖配置

将 sdk-android-demo/app/libs 中的 meishu-sdk_xxx_release.aar、open_ad_sdk_xxx.aar、Baidu_MobAds_SDK-release-xxx.aar、GDTSDK.unionNormal.xxx.aar、msa_mdid_1.0.13 拷贝到项目的 libs 下,对应的 build.gradle 文件里面添加如下配置

sdk 依赖一些第三方库,具体如下代码所示

xxx代表版本号,建议使用 demo 中的版本

穿山甲、百度、广点通三个包可选,不接入可以不添加

repositories{

flatDir{

dirs 'libs'

}

}

dependencies {

implementation(name: 'meishu-sdk_xxx_release', ext: 'aar') // 美数

implementation(name: 'open_ad_sdk_xxx', ext: 'aar') // 穿山甲

implementation(name: 'Baidu_MobAds_SDK-release-xxx', ext: 'aar') // 百度

implementation(name: 'GDTSDK.unionNormal.xxx', ext: 'aar') // 广点通

implementation(name: 'msa_mdid_xxx', ext: 'aar') // oaid

implementation 'com.squareup.okhttp3:okhttp:3.12.1'

implementation 'com.google.code.gson:gson:2.8.5'

implementation 'com.googlecode.android-query:android-query:0.25.9'

implementation 'com.github.razerdp:BasePopup:2.2.1'

implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.6'

implementation 'com.danikula:videocache:2.7.1'

}

manifest配置

在application中添加如下代码

android:requestLegacyExternalStorage="true"

添加provider,要注意 provider 中的 android:authorities 不能有重复,xxx_file_path 文件可以从 demo 程序中获取

穿山甲、百度、广点通三个包可选,不接入可以不添加

百度 5.85 之前 provider 使用 com.baidu.mobads.openad.FileProvider,5.85(含) 之后使用 com.baidu.mobads.openad.BDFileProvider,请注意替换,否则无法下载apk

权限也需要添加,代码如下

android:name="com.meishu.sdk.core.service.MeishuFileProvider"

android:authorities="${applicationId}.MeishuFileProvider"

android:exported="false"

android:grantUriPermissions="true">

android:name="android.support.FILE_PROVIDER_PATHS"

android:resource="@xml/meishu_file_path" />

android:name="com.bytedance.sdk.openadsdk.TTFileProvider"

android:authorities="${applicationId}.TTFileProvider"

android:exported="false"

android:grantUriPermissions="true">

android:name="android.support.FILE_PROVIDER_PATHS"

android:resource="@xml/csj_file_path" />

android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"

android:authorities="${applicationId}.TTMultiProvider"

android:exported="false" />

android:name="com.baidu.mobads.AppActivity"

android:configChanges="keyboard|keyboardHidden|orientation"

android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

android:name="com.baidu.mobads.openad.FileProvider"

android:authorities="${applicationId}.bd.provider"

android:exported="false"

android:grantUriPermissions="true">

android:name="android.support.FILE_PROVIDER_PATHS"

android:resource="@xml/bd_file_path" />

android:name="com.qq.e.comm.DownloadService"

android:exported="false" />

android:name="com.qq.e.ads.ADActivity"

android:configChanges="keyboard|keyboardHidden|orientation|screenSize" />

android:name="com.qq.e.ads.PortraitADActivity"

android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

android:screenOrientation="portrait" />

android:name="com.qq.e.ads.LandscapeADActivity"

android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

android:screenOrientation="landscape" />

android:name="android.support.v4.content.FileProvider"

android:authorities="${applicationId}.fileprovider"

android:exported="false"

android:grantUriPermissions="true">

android:name="android.support.FILE_PROVIDER_PATHS"

android:resource="@xml/gdt_file_path" />

SDK初始化配置

// 一定要在 Application 中初始化 sdk,第一个参数需要填入 Application,否则无法正常使用 sdk

// appId 是在美数注册的 appId

// isTest 表示是否开启测试模式,测试模式无法用于生产环境

// getOaid 表示是否获取 oaid,建议填 true

AdSdk.init(this, "101629", true, true);

// 设置下载提示类型,默认不提示 AdSdk.DOWNLOAD_MODE_DIRECTLY

AdSdk.setDownloadMode(AdSdk.DOWNLOAD_MODE_NOTIFY);

// 设置是否 debug 模式,debug 模式会打印内部 log,默认不打印,需要排查错误一定要设置 true

AdSdk.setDebug(true);

// 设置用户标签,什么时候获取到,什么时候设置就可以了

// AdSdk.setAge(18);

// AdSdk.setGender(AdSdk.GENDER_MALE);

// AdSdk.setKeywords("food,game");

// 设置广点通自渲染版本,默认 2.0。这是为老版本做的兼容,一般不需要设置

// AdSdk.setGdtRecyclerVersion(AdSdk.GDT_1);

广告形式

开屏

支持半屏开屏,用户可以添加自己的 logo,注意需要使用 RelativeLayout 来作为 adContainer,目前 loadAd 后会自动展示

接入代码示例如下

SplashAdListener listener = new SplashAdListener() {

@Override

public void onAdLoaded(ISplashAd splashAd) {

// 广告加载成功

splashAd.setInteractionListener(new InteractionListener() {

@Override

public void onAdClicked() {

// 设置点击监听

}

});

}

@Override

public void onAdError() {

// 广告加载错误

}

@Override

public void onAdExposure() {

// 广告曝光

}

@Override

public void onAdClosed() {

// 广告关闭

}

@Override

public void onAdPresent(ISplashAd splashAd) {

// 广告展示,广告被展示时回调(非曝光回调),主要为了解决广点通曝光太晚的问题

}

@Override

public void onAdSkip(ISplashAd splashAd) {

// 点击跳过按钮回调

}

@Override

public void onAdTimeOver(ISplashAd splashAd) {

// 倒计时结束回调

}

};

SplashAdLoader splashAdLoader = new SplashAdLoader(this, adContainer, pid, listener, 3000);

splashAdLoader.loadAd();

Banner

建议使用 FrameLayout 作为 bannerContainer

需要 destroy

BannerAdListener listener = new BannerAdListener() {

@Override

public void onAdLoaded(IBannerAd iBannerAd) {

// 不显示关闭按钮,仅限美数

bannerAd.setCloseButtonVisible(showCloseButton);

// 适应 container 的大小需要设置宽高,仅限美数

bannerAd.setWidthAndHeight(bannerContainer.getMeasuredWidth(), bannerContainer.getMeasuredHeight());

// 将渲染好的广告 view 放入布局的 bannerContainer 中

bannerContainer.addView(bannerAd.getAdView());

bannerAd.setInteractionListener(new InteractionListener() {

@Override

public void onAdClicked() {

// 点击监听

}

});

}

@Override

public void onAdError() {

}

@Override

public void onAdExposure() {

}

@Override

public void onAdClosed() {

}

};

BannerAdLoader bannerLoader = new BannerAdLoader(this, pid, listener);

bannerLoader.loadAd();

if (bannerLoader != null) {

bannerLoader.destroy();

}

插屏

插屏广告支持加载与展示分离,可通过 interstitialAd.showAd(activity); 在其他 activity 中进行展示

需要 destroy

InterstitialAdListener interstitialAdListener = new InterstitialAdListener() {

@Override

public void onAdLoaded(InterstitialAd interstitialAd) {

interstitialAd.setInteractionListener(new InteractionListener() {

@Override

public void onAdClicked() {

}

});

// 展示广告

interstitialAd.showAd();

}

@Override

public void onAdExposure() {

}

@Override

public void onAdClosed() {

}

@Override

public void onAdError() {

}

};

InterstitialAdLoader interstitialAdLoader = new InterstitialAdLoader(this, pid, interstitialAdListener);

interstitialAdLoader.loadAd();

if (interstitialAdLoader != null) {

interstitialAdLoader.destroy();

}

信息流

视频贴片

需要 destroy

PasterAdListener listener = new PasterAdListener() {

@Override

public void onAdLoaded(PasterAd pasterAd) {

pasterAd.setInteractionListener(new InteractionListener() {

@Override

public void onAdClicked() {

}

});

}

@Override

public void onAdError() {

}

@Override

public void onAdExposure() {

}

@Override

public void onAdClosed() {

}

@Override

public void onVideoLoaded() {

// 视频 onPrepared 时回调

}

@Override

public void onVideoComplete() {

// 视频播放完成时回调

}

};

PasterAdLoader pasterAdLoader = new PasterAdLoader(this, videoContainer, pid, listener);

pasterAdLoader.loadAd();

if (pasterAdLoader != null) {

pasterAdLoader.destroy();

}

激励视频

支持加载与展示分离

需要 destroy

RewardVideoAdListener listener = new RewardVideoAdListener() {

@Override

public void onAdLoaded(RewardVideoAd rewardVideoAd) {

rewardVideoAd.setInteractionListener(new InteractionListener() {

@Override

public void onAdClicked() {

}

});

rewardVideoAd.showAd();

}

@Override

public void onAdError() {

}

@Override

public void onAdExposure() {

}

@Override

public void onAdClosed() {

}

@Override

public void onVideoCached() {

// 目前无用

}

@Override

public void onReward() {

// 获得奖励后回调

}

};

RewardVideoLoader rewardVideoLoader = new RewardVideoLoader(this, pid, listener);

rewardVideoLoader.loadAd();

if (rewardVideoLoader != null) {

rewardVideoLoader.destroy();

}

错误排查

初始化时设置 AdSdk.setDebug(true); 日志中搜索 MeishuSdk_ 即可看到 sdk 内部打印的 log,目前包含上报信息,错误信息等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值