(新手植入有米广告教程)根据官方例子给简单的应用加入有米广告
2017-08-17 16:13
597 查看
第一步,到有米官网中申请一个开发者账户,然后在当前页面中添加一个应用,之后获取应用的应用秘钥和发布ID。如下图:
第二步,下载有米广告SDD,并解压该SDK,把其中libs文件夹中以.arr结尾的文件复制到AS的新工程libs文件夹中,然后编译一下。
然后配置应用的build.gradle文件,记住是应用的,不是工程build.gradle文件。具体如下图红圈所示:加入文件所没有的代码即可,后编译一下。
第三步:配置AndroidMainfest.xml文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.weihuan.youmiguanggaotest">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permissio
4000
n.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!-- 以下为可选权限 -->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".BaseActivity"></activity>
<activity
android:name=".SplashActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter >
</activity >
<activity android:name=".MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout">
</activity>
<activity
android:name=".SpotAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/app_name" >
</activity >
<activity
android:name=".SlideableSpotAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/app_name" >
</activity >
<activity
android:name=".NativeSpotAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/app_name" >
</activity >
<activity
android:name=".VideoAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/app_name"
android:resizeableActivity="false"
android:screenOrientation="portrait" >
</activity >
<activity
android:name=".NativeVideoAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/app_name" >
</activity >
<!-- 视频组件 -->
<activity
android:name="net.youmi.android.nm.vdo.VideoActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:resizeableActivity="false"
android:screenOrientation="landscape"
android:taskAffinity=""
android:theme="@android:style/Theme.NoTitleBar" >
</activity >
有米SDK为了兼容Android N应用间共享文件行为变更而需要配置的FileProvider
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.youmi.android.addemo.fileProvider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider" />
</provider >
<!-- 有米渠道号(可选配置) 渠道号不能带空格,类型为整数 -->
<meta-data
android:name="YOUMI_CHANNEL"
android:value="0" >
</meta-data >
</application>
</manifest>
第四步,新建三个Activity和所属的XMl布局文件,为:SplashActivity、MainActivity、BaseActivity具体代码如下:
1、BaseActivity的XML布局(其实没用到这布局)和类中代码:
public class BaseActivity extends AppCompatActivity {
protected static final String TAG = "youmi-demo";
protected Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
setContentView(R.layout.activity_base);
}
/**
* 打印调试级别日志
*
* @param format
* @param args
*/
protected void logDebug(String format, Object... args) {
logMessage(Log.DEBUG, format, args);
}
/**
* 打印信息级别日志
*
* @param format
* @param args
*/
protected void logInfo(String format, Object... args) {
logMessage(Log.INFO, format, args);
}
/**
* 打印错误级别日志
*
* @param format
* @param args
*/
protected void logError(String format, Object... args) {
logMessage(Log.ERROR, format, args);
}
/**
* 展示短时Toast
*
* @param format
* @param args
*/
protected void showShortToast(String format, Object... args) {
showToast(Toast.LENGTH_SHORT, format, args);
}
/**
* 展示长时Toast
*
* @param format
* @param args
*/
protected void showLongToast(String format, Object... args) {
showToast(Toast.LENGTH_LONG, format, args);
}
/**
* 打印日志
*
* @param level
* @param format
* @param args
*/
private void logMessage(int level, String format, Object... args) {
String formattedString = String.format(format, args);
switch (level) {
case Log.DEBUG:
Log.d(TAG, formattedString);
break;
case Log.INFO:
Log.i(TAG, formattedString);
break;
case Log.ERROR:
Log.e(TAG, formattedString);
break;
}
}
/**
* 展示Toast
*
* @param duration
* @param format
* @param args
*/
private void showToast(int duration, String format, Object... args) {
Toast.makeText(mContext, String.format(format, args), duration).show();
}
}
2、SplashActivity的XML布局文件和类中代码:
public class SplashActivity extends BaseActivity {
private PermissionHelper mPermissionHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
mContext = this;
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 移除标题栏
setContentView(R.layout.activity_splash);
runApp();//直接就运行了
// 当系统为6.0以上时,需要申请权限
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
mPermissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mPermissionHelper.onActivityResult(requestCode, resultCode, data);
}
/**
* 跑应用的逻辑
*/
private void runApp() {
//初始化SDK
AdManager.getInstance(mContext).init("85aa56a59eac8b3d", "a14006f66f58d5d7", true);
//设置开屏
setupSplashAd();
}
/**
* 设置开屏广告
*/
private void setupSplashAd() {
// 创建开屏容器
final RelativeLayout splashLayout = (RelativeLayout) findViewById(R.id.rl_splash);
RelativeLayout.LayoutParams params =
new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
params.addRule(RelativeLayout.ABOVE, R.id.view_divider);
// 对开屏进行设置
SplashViewSettings splashViewSettings = new SplashViewSettings();
//
// 设置是否展示失败自动跳转,默认自动跳转
//
splashViewSettings.setAutoJumpToTargetWhenShowFailed(false);
// 设置跳转的窗口类
splashViewSettings.setTargetClass(MainActivity.class);
// 设置开屏的容器
splashViewSettings.setSplashViewContainer(splashLayout);
// 展示开屏广告
SpotManager.getInstance(mContext)
.showSplash(mContext, splashViewSettings, new SpotListener() {
@Override
public void onShowSuccess() {
logInfo("开屏展示成功");
}
@Override
public void onShowFailed(int errorCode) {
logError("开屏展示失败");
switch (errorCode) {
case ErrorCode.NON_NETWORK:
logError("网络异常");
break;
case ErrorCode.NON_AD:
logError("暂无开屏广告");
break;
case ErrorCode.RESOURCE_NOT_READY:
logError("开屏资源还没准备好");
break;
case ErrorCode.SHOW_INTERVAL_LIMITED:
logError("开屏展示间隔限制");
break;
case ErrorCode.WIDGET_NOT_IN_VISIBILITY_STATE:
logError("开屏控件处在不可见状态");
break;
default:
logError("errorCode: %d", errorCode);
break;
}
}
@Override
public void onSpotClosed() {
logDebug("开屏被关闭");
}
@Override
public void onSpotClicked(boolean isWebPage) {
logDebug("开屏被点击");
logInfo("是否是网页广告?%s", isWebPage ? "是" : "不是");
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
// 开屏展示界面的 onDestroy() 回调方法中调用
SpotManager.getInstance(mContext).onDestroy();
}
}
3、MainActivity的XML布局和代码:
XML布局
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_activity"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/tv_main_top_tag"
style="@style/style_text"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:text="@string/tv_main_top_tag"
android:textSize="24sp"
/>
<TextView
android:id="@+id/tv_main_version_info"
style="@style/style_text"
android:layout_below="@id/tv_main_top_tag"
android:layout_centerHorizontal="true"
android:layout_marginTop="12dp"
android:text="@string/tv_main_version_info"
android:textSize="18sp"
/>
<Button
android:id="@+id/btn_main_show_spot_ad"
style="@style/style_button"
android:layout_below="@id/tv_main_version_info"
android:layout_marginTop="40dp"
android:text="@string/btn_main_show_spot_ad"
/>
<Button
android:id="@+id/btn_main_show_slideable_spot_ad"
style="@style/style_button"
android:layout_below="@id/btn_main_show_spot_ad"
android:layout_marginTop="12dp"
android:text="@string/btn_main_show_slideable_spot_ad"
/>
<Button
android:id="@+id/btn_main_show_native_spot_ad"
style="@style/style_button"
android:layout_below="@id/btn_main_show_slideable_spot_ad"
android:layout_marginTop="12dp"
android:text="@string/btn_main_show_native_spot_ad"
/>
<Button
android:id="@+id/btn_main_show_video_ad"
style="@style/style_button"
android:layout_below="@id/btn_main_show_native_spot_ad"
android:layout_marginTop="12dp"
android:text="@string/btn_main_show_video_ad"
/>
<Button
android:id="@+id/btn_main_show_native_video_ad"
style="@style/style_button"
android:layout_below="@id/btn_main_show_video_ad"
android:layout_marginTop="12dp"
android:text="@string/btn_main_show_native_video_ad"
/>
<Button
android:id="@+id/btn_main_check_ad_settings"
style="@style/style_button"
android:layout_below="@id/btn_main_show_native_video_ad"
android:layout_marginTop="12dp"
android:text="@string/btn_main_check_ad_settings"
/>
<LinearLayout
android:id="@+id/ll_main_banner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:orientation="horizontal"
>
</LinearLayout >
<TextView
style="@style/style_text"
android:layout_below="@id/btn_main_check_ad_settings"
android:layout_centerHorizontal="true"
android:layout_marginBottom="12dp"
android:layout_marginTop="24dp"
android:text="@string/tv_main_bottom_tag"
android:textSize="16sp"
/>
</RelativeLayout >
</ScrollView >
MainActivity 代码
public class MainActivity extends BaseActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 设置应用版本信息
setupAppVersionInfo();
// 初始化视图
initView();
// 预加载数据
preloadData();
// 检查广告配置
checkAdSettings();
//设置广告条
setupBannerAd();
}
/**
* 设置应用版本信息
*/
private void setupAppVersionInfo() {
TextView textVersionInfo = (TextView) findViewById(R.id.tv_main_version_info);
if (textVersionInfo != null) {
textVersionInfo.append(getAppVersionName());
}
}
/**
* 初始化视图
*/
private void initView() {
findViewById(R.id.btn_main_show_spot_ad).setOnClickListener(this);
findViewById(R.id.btn_main_show_slideable_spot_ad).setOnClickListener(this);
findViewById(R.id.btn_main_show_native_spot_ad).setOnClickListener(this);
findViewById(R.id.btn_main_show_video_ad).setOnClickListener(this);
findViewById(R.id.btn_main_show_native_video_ad).setOnClickListener(this);
}
/**
* 预加载数据
*/
private void preloadData() {
// 设置服务器回调 userId,一定要在请求广告之前设置,否则无效
VideoAdManager.getInstance(mContext).setUserId("userId");
// 请求视频广告
VideoAdManager.getInstance(mContext).requestVideoAd(mContext);
}
/**
* 检查广告配置
*/
private void checkAdSettings() {
Button btnCheckAdSettings = (Button) findViewById(R.id.btn_main_check_ad_settings);
btnCheckAdSettings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean result = VideoAdManager.getInstance(mContext).checkVideoAdConfig();
showShortToast("配置 %s", result ? "正确" : "不正确,请对照文档检查是否存在遗漏");
}
});
}
/**
* 设置广告条广告
*/
private void setupBannerAd() {
/**
* 悬浮布局
*/
// 实例化LayoutParams
FrameLayout.LayoutParams layoutParams =
new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
// 设置广告条的悬浮位置,这里示例为右下角
layoutParams.gravity = Gravity.BOTTOM | Gravity.RIGHT;
// 获取广告条
final View bannerView = BannerManager.getInstance(mContext)
.getBannerView(mContext, new BannerViewListener() {
@Override
public void onRequestSuccess() {
logInfo("请求广告条成功");
}
@Override
public void onSwitchBanner() {
logDebug("广告条切换");
}
@Override
public void onRequestFailed() {
logError("请求广告条失败");
}
});
// 添加广告条到窗口中
((Activity) mContext).addContentView(bannerView, layoutParams);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 展示广告条窗口的 onDestroy() 回调方法中调用
BannerManager.getInstance(mContext).onDestroy();
// 退出应用时调用,用于释放资源
// 如果无法保证应用主界面的 onDestroy() 方法被执行到,请移动以下接口到应用的退出逻辑里面调用
// 插屏广告(包括普通插屏广告、轮播插屏广告、原生插屏广告)
SpotManager.getInstance(mContext).onAppExit();
// 视频广告(包括普通视频广告、原生视频广告)
VideoAdManager.getInstance(mContext).onAppExit();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
// 插屏广告
case R.id.btn_main_show_spot_ad:
startActivity(new Intent(mContext, SpotAdActivity.class));
break;
// 轮播插屏广告
case R.id.btn_main_show_slideable_spot_ad:
startActivity(new Intent(mContext, SlideableSpotAdActivity.class));
break;
// 原生插屏广告
case R.id.btn_main_show_native_spot_ad:
startActivity(new Intent(mContext, NativeSpotAdActivity.class));
break;
// 视屏广告
case R.id.btn_main_show_video_ad:
startActivity(new Intent(mContext, VideoAdActivity.class));
break;
// 原生视频广告
case R.id.btn_main_show_native_video_ad:
startActivity(new Intent(mContext, NativeVideoAdActivity.class));
break;
default:
break;
}
}
/**
* 获取应用版本号
*
* @return 应用当前的版本号
*/
private String getAppVersionName() {
try {
PackageManager packageManager = getPackageManager();
return packageManager.getPackageInfo(getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
return null;
}
}
}
运行效果如下:应用开屏广告、插屏广告、其它广告
Demo下载链接:有米广告demo
第二步,下载有米广告SDD,并解压该SDK,把其中libs文件夹中以.arr结尾的文件复制到AS的新工程libs文件夹中,然后编译一下。
然后配置应用的build.gradle文件,记住是应用的,不是工程build.gradle文件。具体如下图红圈所示:加入文件所没有的代码即可,后编译一下。
第三步:配置AndroidMainfest.xml文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.weihuan.youmiguanggaotest">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permissio
4000
n.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!-- 以下为可选权限 -->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".BaseActivity"></activity>
<activity
android:name=".SplashActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter >
</activity >
<activity android:name=".MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout">
</activity>
<activity
android:name=".SpotAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/app_name" >
</activity >
<activity
android:name=".SlideableSpotAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/app_name" >
</activity >
<activity
android:name=".NativeSpotAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/app_name" >
</activity >
<activity
android:name=".VideoAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/app_name"
android:resizeableActivity="false"
android:screenOrientation="portrait" >
</activity >
<activity
android:name=".NativeVideoAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/app_name" >
</activity >
<!-- 视频组件 -->
<activity
android:name="net.youmi.android.nm.vdo.VideoActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:resizeableActivity="false"
android:screenOrientation="landscape"
android:taskAffinity=""
android:theme="@android:style/Theme.NoTitleBar" >
</activity >
有米SDK为了兼容Android N应用间共享文件行为变更而需要配置的FileProvider
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.youmi.android.addemo.fileProvider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider" />
</provider >
<!-- 有米渠道号(可选配置) 渠道号不能带空格,类型为整数 -->
<meta-data
android:name="YOUMI_CHANNEL"
android:value="0" >
</meta-data >
</application>
</manifest>
第四步,新建三个Activity和所属的XMl布局文件,为:SplashActivity、MainActivity、BaseActivity具体代码如下:
1、BaseActivity的XML布局(其实没用到这布局)和类中代码:
public class BaseActivity extends AppCompatActivity {
protected static final String TAG = "youmi-demo";
protected Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
setContentView(R.layout.activity_base);
}
/**
* 打印调试级别日志
*
* @param format
* @param args
*/
protected void logDebug(String format, Object... args) {
logMessage(Log.DEBUG, format, args);
}
/**
* 打印信息级别日志
*
* @param format
* @param args
*/
protected void logInfo(String format, Object... args) {
logMessage(Log.INFO, format, args);
}
/**
* 打印错误级别日志
*
* @param format
* @param args
*/
protected void logError(String format, Object... args) {
logMessage(Log.ERROR, format, args);
}
/**
* 展示短时Toast
*
* @param format
* @param args
*/
protected void showShortToast(String format, Object... args) {
showToast(Toast.LENGTH_SHORT, format, args);
}
/**
* 展示长时Toast
*
* @param format
* @param args
*/
protected void showLongToast(String format, Object... args) {
showToast(Toast.LENGTH_LONG, format, args);
}
/**
* 打印日志
*
* @param level
* @param format
* @param args
*/
private void logMessage(int level, String format, Object... args) {
String formattedString = String.format(format, args);
switch (level) {
case Log.DEBUG:
Log.d(TAG, formattedString);
break;
case Log.INFO:
Log.i(TAG, formattedString);
break;
case Log.ERROR:
Log.e(TAG, formattedString);
break;
}
}
/**
* 展示Toast
*
* @param duration
* @param format
* @param args
*/
private void showToast(int duration, String format, Object... args) {
Toast.makeText(mContext, String.format(format, args), duration).show();
}
}
2、SplashActivity的XML布局文件和类中代码:
public class SplashActivity extends BaseActivity {
private PermissionHelper mPermissionHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
mContext = this;
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 移除标题栏
setContentView(R.layout.activity_splash);
runApp();//直接就运行了
// 当系统为6.0以上时,需要申请权限
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
mPermissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mPermissionHelper.onActivityResult(requestCode, resultCode, data);
}
/**
* 跑应用的逻辑
*/
private void runApp() {
//初始化SDK
AdManager.getInstance(mContext).init("85aa56a59eac8b3d", "a14006f66f58d5d7", true);
//设置开屏
setupSplashAd();
}
/**
* 设置开屏广告
*/
private void setupSplashAd() {
// 创建开屏容器
final RelativeLayout splashLayout = (RelativeLayout) findViewById(R.id.rl_splash);
RelativeLayout.LayoutParams params =
new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
params.addRule(RelativeLayout.ABOVE, R.id.view_divider);
// 对开屏进行设置
SplashViewSettings splashViewSettings = new SplashViewSettings();
//
// 设置是否展示失败自动跳转,默认自动跳转
//
splashViewSettings.setAutoJumpToTargetWhenShowFailed(false);
// 设置跳转的窗口类
splashViewSettings.setTargetClass(MainActivity.class);
// 设置开屏的容器
splashViewSettings.setSplashViewContainer(splashLayout);
// 展示开屏广告
SpotManager.getInstance(mContext)
.showSplash(mContext, splashViewSettings, new SpotListener() {
@Override
public void onShowSuccess() {
logInfo("开屏展示成功");
}
@Override
public void onShowFailed(int errorCode) {
logError("开屏展示失败");
switch (errorCode) {
case ErrorCode.NON_NETWORK:
logError("网络异常");
break;
case ErrorCode.NON_AD:
logError("暂无开屏广告");
break;
case ErrorCode.RESOURCE_NOT_READY:
logError("开屏资源还没准备好");
break;
case ErrorCode.SHOW_INTERVAL_LIMITED:
logError("开屏展示间隔限制");
break;
case ErrorCode.WIDGET_NOT_IN_VISIBILITY_STATE:
logError("开屏控件处在不可见状态");
break;
default:
logError("errorCode: %d", errorCode);
break;
}
}
@Override
public void onSpotClosed() {
logDebug("开屏被关闭");
}
@Override
public void onSpotClicked(boolean isWebPage) {
logDebug("开屏被点击");
logInfo("是否是网页广告?%s", isWebPage ? "是" : "不是");
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
// 开屏展示界面的 onDestroy() 回调方法中调用
SpotManager.getInstance(mContext).onDestroy();
}
}
3、MainActivity的XML布局和代码:
XML布局
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_activity"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/tv_main_top_tag"
style="@style/style_text"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:text="@string/tv_main_top_tag"
android:textSize="24sp"
/>
<TextView
android:id="@+id/tv_main_version_info"
style="@style/style_text"
android:layout_below="@id/tv_main_top_tag"
android:layout_centerHorizontal="true"
android:layout_marginTop="12dp"
android:text="@string/tv_main_version_info"
android:textSize="18sp"
/>
<Button
android:id="@+id/btn_main_show_spot_ad"
style="@style/style_button"
android:layout_below="@id/tv_main_version_info"
android:layout_marginTop="40dp"
android:text="@string/btn_main_show_spot_ad"
/>
<Button
android:id="@+id/btn_main_show_slideable_spot_ad"
style="@style/style_button"
android:layout_below="@id/btn_main_show_spot_ad"
android:layout_marginTop="12dp"
android:text="@string/btn_main_show_slideable_spot_ad"
/>
<Button
android:id="@+id/btn_main_show_native_spot_ad"
style="@style/style_button"
android:layout_below="@id/btn_main_show_slideable_spot_ad"
android:layout_marginTop="12dp"
android:text="@string/btn_main_show_native_spot_ad"
/>
<Button
android:id="@+id/btn_main_show_video_ad"
style="@style/style_button"
android:layout_below="@id/btn_main_show_native_spot_ad"
android:layout_marginTop="12dp"
android:text="@string/btn_main_show_video_ad"
/>
<Button
android:id="@+id/btn_main_show_native_video_ad"
style="@style/style_button"
android:layout_below="@id/btn_main_show_video_ad"
android:layout_marginTop="12dp"
android:text="@string/btn_main_show_native_video_ad"
/>
<Button
android:id="@+id/btn_main_check_ad_settings"
style="@style/style_button"
android:layout_below="@id/btn_main_show_native_video_ad"
android:layout_marginTop="12dp"
android:text="@string/btn_main_check_ad_settings"
/>
<LinearLayout
android:id="@+id/ll_main_banner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:orientation="horizontal"
>
</LinearLayout >
<TextView
style="@style/style_text"
android:layout_below="@id/btn_main_check_ad_settings"
android:layout_centerHorizontal="true"
android:layout_marginBottom="12dp"
android:layout_marginTop="24dp"
android:text="@string/tv_main_bottom_tag"
android:textSize="16sp"
/>
</RelativeLayout >
</ScrollView >
MainActivity 代码
public class MainActivity extends BaseActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 设置应用版本信息
setupAppVersionInfo();
// 初始化视图
initView();
// 预加载数据
preloadData();
// 检查广告配置
checkAdSettings();
//设置广告条
setupBannerAd();
}
/**
* 设置应用版本信息
*/
private void setupAppVersionInfo() {
TextView textVersionInfo = (TextView) findViewById(R.id.tv_main_version_info);
if (textVersionInfo != null) {
textVersionInfo.append(getAppVersionName());
}
}
/**
* 初始化视图
*/
private void initView() {
findViewById(R.id.btn_main_show_spot_ad).setOnClickListener(this);
findViewById(R.id.btn_main_show_slideable_spot_ad).setOnClickListener(this);
findViewById(R.id.btn_main_show_native_spot_ad).setOnClickListener(this);
findViewById(R.id.btn_main_show_video_ad).setOnClickListener(this);
findViewById(R.id.btn_main_show_native_video_ad).setOnClickListener(this);
}
/**
* 预加载数据
*/
private void preloadData() {
// 设置服务器回调 userId,一定要在请求广告之前设置,否则无效
VideoAdManager.getInstance(mContext).setUserId("userId");
// 请求视频广告
VideoAdManager.getInstance(mContext).requestVideoAd(mContext);
}
/**
* 检查广告配置
*/
private void checkAdSettings() {
Button btnCheckAdSettings = (Button) findViewById(R.id.btn_main_check_ad_settings);
btnCheckAdSettings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean result = VideoAdManager.getInstance(mContext).checkVideoAdConfig();
showShortToast("配置 %s", result ? "正确" : "不正确,请对照文档检查是否存在遗漏");
}
});
}
/**
* 设置广告条广告
*/
private void setupBannerAd() {
/**
* 悬浮布局
*/
// 实例化LayoutParams
FrameLayout.LayoutParams layoutParams =
new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
// 设置广告条的悬浮位置,这里示例为右下角
layoutParams.gravity = Gravity.BOTTOM | Gravity.RIGHT;
// 获取广告条
final View bannerView = BannerManager.getInstance(mContext)
.getBannerView(mContext, new BannerViewListener() {
@Override
public void onRequestSuccess() {
logInfo("请求广告条成功");
}
@Override
public void onSwitchBanner() {
logDebug("广告条切换");
}
@Override
public void onRequestFailed() {
logError("请求广告条失败");
}
});
// 添加广告条到窗口中
((Activity) mContext).addContentView(bannerView, layoutParams);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 展示广告条窗口的 onDestroy() 回调方法中调用
BannerManager.getInstance(mContext).onDestroy();
// 退出应用时调用,用于释放资源
// 如果无法保证应用主界面的 onDestroy() 方法被执行到,请移动以下接口到应用的退出逻辑里面调用
// 插屏广告(包括普通插屏广告、轮播插屏广告、原生插屏广告)
SpotManager.getInstance(mContext).onAppExit();
// 视频广告(包括普通视频广告、原生视频广告)
VideoAdManager.getInstance(mContext).onAppExit();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
// 插屏广告
case R.id.btn_main_show_spot_ad:
startActivity(new Intent(mContext, SpotAdActivity.class));
break;
// 轮播插屏广告
case R.id.btn_main_show_slideable_spot_ad:
startActivity(new Intent(mContext, SlideableSpotAdActivity.class));
break;
// 原生插屏广告
case R.id.btn_main_show_native_spot_ad:
startActivity(new Intent(mContext, NativeSpotAdActivity.class));
break;
// 视屏广告
case R.id.btn_main_show_video_ad:
startActivity(new Intent(mContext, VideoAdActivity.class));
break;
// 原生视频广告
case R.id.btn_main_show_native_video_ad:
startActivity(new Intent(mContext, NativeVideoAdActivity.class));
break;
default:
break;
}
}
/**
* 获取应用版本号
*
* @return 应用当前的版本号
*/
private String getAppVersionName() {
try {
PackageManager packageManager = getPackageManager();
return packageManager.getPackageInfo(getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
return null;
}
}
}
运行效果如下:应用开屏广告、插屏广告、其它广告
Demo下载链接:有米广告demo
相关文章推荐
- (新手植入有米广告教程)根据官方例子给简单的应用加入有米广告
- 【三星官方教程】如何为Gear VR开发应用(六):加入渐变效果
- Windows Server 2012活动目录基础配置与应用(新手教程)之3---将客户机加入到指定域
- Android基础入门教程——2.4.15 DrawerLayout(官方侧滑菜单)左右侧滑的简单使用
- hibernate官方新手教程 (转载)
- 根据传智播客ibatis视频教程编写的入门例子
- 【转】开发者教程:如何将Android应用发布到Google Play(Android Market)官方市场
- 适合新手学习TabBar的官方例子Tabster
- Android 基础教程之---动态更改屏幕方向的简单例子(LANDSCAPE与PORTRAIT)!
- Android基础教程(三)之-----简单的Button事件响应综合提示控件Toast的应用
- 【新手教程】如何向App Store提交应用
- 新手结婚官方教程.
- 从一个新手容易混淆的例子简单分析C语言中函数调用过程
- 网页游戏开发入门教程三(简单程序应用)
- Appium+Robotframework实现iOS应用的自动化测试-5:一个简单的例子
- Android官方教程翻译(3)——创建一个简单的用户界面
- WCF走你~一个简单的例子,根据用户ID,从用户模块(用户服务器)获得实体
- XCode 4.3.2 如何新建 Window-based Application应用的简单例子
- 如何在OS X 10.7上开发一个简单的应用教程(一)
- XCode 4.3.2 如何新建 Window-based Application应用的简单例子