使用 AndroidStudio 开发环境,推荐AndroidStudio 4.0 以上,推荐gradle:4.0.0 以上; 【最低支持gradle:3.6.4】
下载后的 ../libs 文件目录下有所需要的所有依赖包。将所需要的aar、jar包拷⻉到 libs ⽬录下,其中*voice_*.aar非必须包, *fastjson*.jar若项目内已有,请选择高版本的避免重复与冲突。
android {
//...
defaultConfig {
minSdkVersion 21
multiDexEnabled true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
//...
}
//添加依赖库⽬录
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
//广告添加相关依赖包
implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"])//导入广告相关aar和jar包
implementation "com.android.support:design:28.0.0"
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.google.code.gson:gson:2.8.5' //若没有 则添加,避免冲突不要反复引入
//implementation "androidx.legacy:legacy-support-v4:1.0.0"//加入 AndroidX V4 依赖支持库
//GroMore_sdk
implementation "com.pangle.cn:mediation-sdk:5.6.1.6"
}
apply plugin: 'com.android.application'
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
compileSdkVersion 28
defaultConfig {
applicationId "com.soyea.ryc.test"
minSdkVersion 21
targetSdkVersion 28
versionCode 99999
versionName "20.0.0"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
signingConfigs {
releaseConfig {
storeFile file("ryc.jks")
storePassword '123456'
keyAlias = 'ryc'
keyPassword '123456'
}
debug {
storeFile file("ryc.jks")
storePassword '123456'
keyAlias = 'ryc'
keyPassword '123456'
}
}
}
//添加依赖库⽬录
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"])
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.scwang.smart:refresh-layout-kernel:2.0.1'
implementation 'com.scwang.smart:refresh-header-classics:2.0.1' //经典刷新头
implementation 'com.scwang.smart:refresh-footer-classics:2.0.1' //经典加载
implementation 'com.github.bumptech.glide:glide:4.9.0'
//添加相关依赖包
implementation 'com.android.support:multidex:1.0.3'
//implementation "androidx.legacy:legacy-support-v4:1.0.0"//加入 AndroidX V4 依赖支持库
//语音红包 必要的第三方库支持
implementation 'com.squareup.retrofit2:retrofit:2.2.0'
implementation 'com.squareup.retrofit2:converter-gson:2.2.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.liulishuo.filedownloader:library:1.7.7'
implementation ('com.google.android.exoplayer:exoplayer-core:2.15.1') { //非必须
exclude group: "androidx.annotation", module: "annotation"
}
implementation 'com.android.support.constraint:constraint-layout:2.0.4'//如果您的项目中没有用到约束布局,需要添加该依赖
//多量
// 如果你的appcompat用的是1.1.0以上版本,请自动集成 swiperefreshlayout:1.1.0
//implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
//implementation(name: 'dy-task-sdk-2.2.9', ext: 'aar')
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.anythink.sdk">
<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.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application>
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
<provider
android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
android:authorities="${applicationId}.TTMultiProvider"
android:exported="false" />
<provider
android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
android:authorities="${applicationId}.TTFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/alex_tt_file_path" />
</provider>
<!-- source file: china/network_sdk/gdt/4.542.1412/AndroidManifest.xml -->
<provider
android:name="com.qq.e.comm.GDTFileProvider"
android:authorities="${applicationId}.gdt.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/anythink_bk_gdt_file_path" />
</provider>
</application>
</manifest>
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
if (!SharedPreferencesUtils.getIsFirstInit(this.getApplicationContext())) {
//String currentProcessName = AppUtils.getCurrentProcessName(this);//当前进程名
initOaid();
initBaiyi();
}
}
//广告初始化【ByManager.init】之前执行oaid_sdk初始化操作
private void initOaid() {
//System.loadLibrary("msaoaidsec");
int code = com.bun.miitmdid.core.MdidSdkHelper.InitSdk(this, true,
new com.bun.miitmdid.interfaces.IIdentifierListener() {
@Override
public void OnSupport(boolean b, com.bun.miitmdid.interfaces.IdSupplier idSupplier) {
}
});
}
//SDK初始化
private void initBaiyi() {
ByInitConfig config = new ByInitConfig.Builder()
.appId("平台上申请的媒体ID")//初始化id就是媒体审核通过后的媒体编号,请在我的媒体中查看
.build();
ByManager.init(this, config, new ByManager.IsInitListener() {
@Override
public void onFail(String s) {
}
@Override
public void onSuccess() {
//打印输出日志,查看是否初始化成功
}
});
}
//debug调试Toast
private void debug_toast() {
if (AppUtils.isApkInDebug(this)) {
TToast.initToast(this);
}
//TToast.reset();
}
@Override
protected void attachBaseContext(android.content.Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
RequestPermission.RequestPermissionIfNecessary(this);
BySplashConfig config = new BySplashConfig.Builder()
.codeId("广告位id")//平台申请的广告位id
.container(mSplashContainer)//承载视图的容器。可⾃定义⾼度⽐例,但不能低于0.75
.build();
ByManager.loadSplash(config, this, new ByManager.SplashLoadListener() {
@Override
public void onFail(String s) { //广告加载失败回调
Toast.makeText(SplashActivity.this, s, Toast.LENGTH_SHORT).show(); //本段代码作为提示用,线上广告加载不出来一般不提示给用户,仅在开发阶段调用
mSplashContainer.removeAllViews();
finish();
}
@Override
public void onDismiss() {
mSplashContainer.removeAllViews();
finish();
}
});
方法名 | 说明 |
---|---|
onFail(String msg) | 开屏广告加载失败,msg加载失败说明( 如果重复请求,请做好次数和间隔限制,千万不要错误之后无限请求) |
onExposure() | 开屏广告渲染成功 |
onClicked() | 开屏广告被点击 |
onDismiss() | 开屏广告关闭 |
ByInteractionConfig config = new ByInteractionConfig.Builder()
.codeId("广告位id")//平台申请的广告位id
.build();
ByManager.loadInteraction(config, this, new ByManager.InteractionLoadListener() {
@Override
public void onFail(String s) {
//Toast.makeText(InteractionActivity.this, s, Toast.LENGTH_SHORT).show();
}
@Override
public void onDismiss() {
}
@Override
public void onVideoReady() {
}
@Override
public void onVideoComplete() {
}
});
方法名 | 说明 |
---|---|
onFail(String msg) | 广告加载失败,msg加载失败说明( 如果重复请求,请做好次数和间隔限制,千万不要错误之后无限请求) |
onExposure() | 广告渲染成功 |
onClicked() | 广告被点击 |
onDismiss() | 广告关闭 |
onVideoReady() | 视频准备就绪开始播放(非视频广告不回调,通常是全屏视频类广告适用) |
onVideoComplete() | 视频播放完成(非视频广告不回调,通常是全屏视频类广告适用) |
ByBannerConfig config = new ByBannerConfig.Builder()
.codeId("广告位id")//平台申请的广告位id
.viewWidth(350)//期望模板view的width(height自适应),默认值350(单位dp)
.container(mBannerContainer)//承载视图的容器
.build();
ByManager.loadBanner(config, this, new ByManager.BannerLoadListener() {
@Override
public void onFail(String s) {
//加载失败
//Toast.makeText(BannerActivity.this, s, Toast.LENGTH_SHORT).show();
}
@Override
public void onDismiss() {
//关闭
}
});
方法名 | 说明 |
---|---|
onFail(String msg) | 广告加载失败,msg加载失败说明( 如果重复请求,请做好次数和间隔限制,千万不要错误之后无限请求) |
onExposure() | 广告渲染成功 |
onClicked() | 广告被点击 |
onDismiss() | 广告关闭 |
ByFeedConfig config = new ByFeedConfig.Builder()
.codeId("广告位id")//平台申请的广告位id
.viewWidth(width)//期望模板view的width,默认值350(单位dp)
.viewHigh(height)//期望模板view的height,默认值0(自适应,单位dp)
.build();
ByManager.loadFeed(config, this, new ByManager.FeedLoadListener() {
@Override
public void onFail(String s) {
//加载失败
Toast.makeText(FeedActivity.this, s, Toast.LENGTH_SHORT).show();
}
@Override
public void onLoad(FeedPosition position) {
//显示信息流
position.showFeed(FeedActivity.this, container); //container承载视图的容器
}
@Override
public void onDismiss() {
//关闭
}
@Override
public void onVideoReady() {
//视频准备就绪开始播放(非视频不回调)
}
@Override
public void onVideoComplete() {
//视频播放完成(非视频不回调)
}
});
方法名 | 说明 |
---|---|
onFail(String msg) | 广告加载失败,msg加载失败说明( 如果重复请求,请做好次数和间隔限制,千万不要错误之后无限请求) |
onLoad(FeedPosition position) | 素材请求成功后返回广告对象FeedPosition,通过position.showFeed(activity, container)来展现广告sssss |
onExposure() | 广告曝光 |
onClicked() | 广告被点击 |
onDismiss() | 广告关闭 |
onVideoReady() | 视频准备就绪开始播放(非视频广告不回调) |
onVideoComplete() | 视频播放完成(非视频广告不回调) |
ByRewardVideoConfig config = new ByRewardVideoConfig.Builder()
.codeId("广告位id")//平台申请的广告位id
.userId("userId")//必填参数,用户ID或者设备唯一标识(服务器回调时也需要),主要用于服务器回调发送通知时使用,若仅是客户端回调,则随便填写一个固定值即可
.orientation(orientation)//必填参数,期望视频的播放方向:VIDEO_HORIZONTAL 或 VIDEO_VERTICAL
.build();
ByManager.loadRewardVideo(config, this, new ByManager.RewardVideoLoadListener() {
@Override
public void onFail(String s) {
//加载失败
progressBar.setVisibility(View.GONE);//加载中弹窗隐藏
//Toast.makeText(RewardVideoActivity.this, s, Toast.LENGTH_SHORT).show();
}
@Override
public void onExposure(String orderNo) {
//如果使用服务器回调,可以将orderNo传给自己服务器来做后续的判断,也可以直接根据服务器回调直接发放奖励。
//progressBar为加载组件
progressBar.setVisibility(View.GONE);//加载中弹窗隐藏
}
@Override
public void onClose() {
//视频被关闭
}
@Override
public void onRewardVideoCached(RewardPosition position) {
//视频加载完成,此时播放视频不卡顿(立即播放没有此回调)
ByManager.playRewardVideo(this, position); //播放视频广告
}
@Override
public void onRewardVerify() {
//激励视频触发激励(观看视频大于一定时长或者视频播放完毕)
//给与用户奖励相关代码
}
});
方法名 | 说明 |
---|---|
onFail(String msg) | 广告加载失败,msg加载失败说明( 如果重复请求,请做好次数和间隔限制,千万不要错误之后无限请求) |
onExposure(String orderNo) | 视频广告曝光(如果使用服务器回调,需要将orderNo传给自己服务器) |
onClick() | 视频被点击 |
onClose() | 视频被关闭 |
onRewardVideoCached(RewardPosition position) | 视频广告加载完成,此时播放视频不卡顿 |
onRewardVerify() | 激励视频触发激励(观看视频大于一定时长或者视频播放完毕时触发) |
ByVideoManager.replaceFrameLayout4Video(activity, "广告位ID", "", "", object : ByVideoManager.IReplaceListener {
override fun onFail(s: String) {
//短视频加载失败
}
override fun getContentPage(contentPage: KsContentPage) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, contentPage.getFragment()).commitAllowingStateLoss();
}
override fun onVideoPlayStart(videoTypeEnum: VideoTypeEnum) {
//视频开始播放
}
override fun onVideoPlayPaused(videoTypeEnum: VideoTypeEnum) {
//暂停
}
override fun onVideoPlayResume(videoTypeEnum: VideoTypeEnum) {
//继续播放
}
override fun onVideoPlayCompleted(videoTypeEnum: VideoTypeEnum) {
//播放完成
}
override fun onPageLeave(videoTypeEnum: VideoTypeEnum) {
//离开
}
})