如何在我的应用启动界面实现「开屏广告」?
什么是开屏广告
开屏广告是一种在应用启动时且在应用主界面显示之前需要被展示的广告。一般是5s展示时间,广告展示时间结束后自动进入应用,用户可以点击跳过按钮直接进入主界面。
开屏广告示例
开屏广告的优势
位置优势:用户在进入App前就会看到开屏广告,相比于应用内广告提前,并且只要使用App的用户就要强制观看。
展示面积大:广告全屏显示,视觉冲击力很强,便于优质内容曝光,吸引用户眼球,增强用户点击率与品牌曝光度。
当用户刚打开应用时,用户覆盖面广,用户注意力集中。因此开屏广告适用于广告主进行大规模的品牌宣传和产品推广。
华为广告服务能够帮助开发者接入包括开屏广告在内的6种广告位。接下来的文章会详细讲解开屏广告的开发步骤。示例代码已在相关社区进行开源,欢迎开发者关注、下载并提供宝贵意见:
Github官方地址:https://github.com/hms-core/hms-ads-demo-java
Gitee官方地址:https://gitee.com/hms-core/hms-ads-demo-java
前提条件
HUAWEI Ads SDK依赖HMS Core(APK)4.0.0.300及以上版本。如果设备上未安装HMS Core(APK)4.0.0.300及以上版本,则无法使用HUAWEI Ads SDK的相关接口。
在开发应用前需要在华为开发者联盟网站上注册成为开发者并完成实名认证,具体方法可参见帐号注册认证。
参见创建项目和在项目中添加应用完成应用的创建。
开发前准备
广告服务的集成需如下4个关键步骤,可以参考华为开发者联盟文档
1. 导入HUAWEI Ads SDK
2. 配置网络权限
3. 配置混淆脚本
4. 初始化SDK
1.1 添加SplashView。
在XML布局文件中添加SplashView。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".SplashActivity"> <!-- 开屏广告Logo区域 --> <RelativeLayout android:id="@+id/logo_area" android:layout_width="match_parent" android:layout_height="100dp" android:layout_alignParentBottom="true" android:background="@android:color/white" android:visibility="visible"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="40dp" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginBottom="6dp" android:gravity="center" android:orientation="horizontal"> <ImageView android:layout_width="28dp" android:layout_height="28dp" android:background="@mipmap/ic_launcher" /> <View android:layout_width="0.5dp" android:layout_height="18dp" android:layout_marginLeft="12dp" android:layout_marginRight="12dp" android:alpha="0.1" android:background="@android:color/black" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:alpha="1" android:text="@string/owner" android:textColor="@android:color/black" android:textSize="16sp" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:alpha="0.5" android:text="@string/copyright_info" android:textColor="@android:color/black" android:textSize="8sp" /> </LinearLayout> </RelativeLayout> <!-- 开屏广告视图 --> <com.huawei.hms.ads.splash.SplashView android:id="@+id/splash_ad_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/logo" />
</RelativeLayout>
复制
以下示例代码展示了如何获取SplashView
SplashView splashView = findViewById(R.id.splash_ad_view);
复制
1.2 修改应用默认启动页面。
开屏广告是在应用主界面显示之前被展示,所以需修改应用默认启动页面。
修改AndroidManifest.xml, 将默认启动的activity修改为SplashActivity,这样即可在应用主界面加载前展示开屏广告。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.huawei.hms.ads.sdk"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:exported="false" android:screenOrientation="portrait"> </activity> <activity android:name=".SplashActivity" android:exported="true" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ... </application>
</manifest>
复制
创建SplashActivity.java类,用于实现开屏广告获取和展示。
...
import android.os.Build;
import androidx.appcompat.app.AppCompatActivity; public class SplashActivity extends AppCompatActivity { // "testq6zq98hecj"为测试专用的广告位ID, App正式发布时需要改为正式的广告位ID private static final String AD_ID = "testq6zq98hecj"; private static final int AD_TIMEOUT = 5000; private static final int MSG_AD_TIMEOUT = 1001; /** * 暂停标志位。 * 在开屏广告页面展示时: * 按返回键退出应用时需设置为true,以确保应用主界面不被拉起; * 切换至其他界面时需设置为false,以确保从其他页面回到开屏广告页面时仍然可以正常跳转至应用主界面; */ private boolean hasPaused = false; // 收到广告展示超时消息时的回调处理 private Handler timeoutHandler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(@NonNull Message msg) { if (SplashActivity.this.hasWindowFocus()) { jump(); } return false; } }); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); // 获取并展示开屏广告 loadAd(); } /** * 广告展示完毕时,从广告界面跳转至App主界面 */ private void jump() { if (!hasPaused) { hasPaused = true; startActivity(new Intent(SplashActivity.this, MainActivity.class)); finish(); } } /** * 按返回键退出应用时需设置为true,以确保应用主界面不被拉起 */ @Override protected void onStop() { // 移除消息队列中等待的超时消息 timeoutHandler.removeMessages(MSG_AD_TIMEOUT); hasPaused = true; super.onStop(); } /** * 从其他页面回到开屏页面时调用,进入应用主界面 */ @Override protected void onRestart() { super.onRestart(); hasPaused = false; jump(); } @Override protected void onDestroy() { super.onDestroy();
复制
1.3 获取广告。
SplashView创建好之后,通过SplashView类的load()方法来获取广告。
private void loadAd() { int orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; AdParam adParam = new AdParam.Builder().build(); SplashView.SplashAdLoadListener splashAdLoadListener = new SplashView.SplashAdLoadListener() { @Override public void onAdLoaded() { // 广告获取成功时调用 ... } @Override public void onAdFailedToLoad(int errorCode) { // 广告获取失败时调用, 跳转至App主界面 jump(); } @Override public void onAdDismissed() { // 广告展示完毕时调用, 跳转至App主界面 jump(); } }; // 获取SplashView SplashView splashView = findViewById(R.id.splash_ad_view); // 设置默认Slogan splashView.setSloganResId(R.drawable.default_slogan); // 设置视频类开屏广告的音频焦点类型 splashView.setAudioFocusType(AudioFocusType.NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE); // 获取广告,其中AD_ID为广告位ID splashView.load(AD_ID, orientation, adParam, splashAdLoadListener); // 发送延时消息,保证广告显示超时后,APP首页可以正常显示 timeoutHandler.removeMessages(MSG_AD_TIMEOUT); timeoutHandler.sendEmptyMessageDelayed(MSG_AD_TIMEOUT, AD_TIMEOUT);
复制
1.4 监听广告事件。
通过实现SplashAdDisplayListener类中的方法来监听广告展示类事件。了解详细方法,请参见API文档中的SplashAdDisplayListener类。
SplashAdDisplayListener adDisplayListener = new SplashAdDisplayListener() { @Override public void onAdShowed() { // 广告显示时调用 ... } @Override public void onAdClick() { // 广告被点击时调用 ... }
};
splashView.setAdDisplayListener(adDisplayListener);
复制
更多应用内广告形式操作指南:
1、应用内添加Banner广告位
2、应用内添加激励广告
3、应用内添加原生广告
4、应用内添加开屏广告
5、应用内添加插屏广告
6、应用内添加贴片广告
>>访问华为广告服务官网,了解更多相关内容
>>获取华为广告服务开发指导文档
>>访问华为开发者联盟官网,了解更多相关内容
>>获取开发指导文档
>>华为移动服务开源仓库地址:GitHub、Gitee
原文链接:developer.huawei.com/consumer/cn…
原作者:胡椒
如何在我的应用启动界面实现「开屏广告」?相关推荐
- android多类型启动广告,如何在我的应用启动界面实现「开屏广告」?
什么是开屏广告 开屏广告是一种在应用启动时且在应用主界面显示之前需要被展示的广告.一般是5s展示时间,广告展示时间结束后自动进入应用,用户可以点击跳过按钮直接进入主界面. 开屏广告示例 开屏广告的优势 ...
- 关于app#启动页面#splash页面#开屏广告#的小结
本次迭代任务完成了开屏广告的接入,在此将本次工作中学到的知识以及遇到的问题做个小结,以便后期回顾.首先splash页面即app启动的第一个activity,我们暂且命名为SplashActivity, ...
- java 程序启动界面_程序启动界面java代码
最近写了个程序启动界面,分享一下 import javax.swing.*; import java.awt.*; import java.net.*; //Download by http://ww ...
- 如何创建启动界面Splash Screen
启动界面Splash Screen在应用程序是很常用的,往往在启动界面中显示产品Logo.公司Logo或者开发者信息,如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段 ...
- WinForm界面开发之 启动界面
我们在开发桌面应用程序的时候,由于程序启动比较慢,往往为了提高用户的体验,增加一个闪屏,也就是SplashScreen,好处有:1.让用户看到加载的过程,提高程序的交互响应:2.可以简短展示或者介绍程 ...
- Android启动界面优化技巧-Splash Screens的正确方式
备注:这里是开发跨平台App时,适配Android启动屏幕,主要为了防止白屏.玩Android开源App 往往我们在开发Android的时候会出现白屏等等,主要原因就是启动时需要加载的资源过多,从而影 ...
- iOS 视频启动界面
一个简单的 "视频启动界面" 的实现,参考他人的实现,核心抽出来,简化了一下. AnimationVideoViewController 实现 - (void)viewDidLoa ...
- Android App开发——添加APP启动界面
1.在创建的项目里面添加一个Empty Activit,我这里命名为BootScreen. 2.把启动时要显示的图像拖到res的mipmap目录下. 3.在BootScreen.java里面添加代码 ...
- 用动画实现android app启动界面的渐变效果
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0505/1211.html 几乎所有的app在启动的时候都会有一个类似于开机画面 ...
最新文章
- 在Linux命令行下查询当前所使用的shell版本与种类的方法
- iPhone SDK发布
- ycsb 测试验证模式的mongodb
- iptables 基础
- 18函数对象19command模式20函数对象在STL中的应用
- OpenShift 4 Tekton (5) - Task/Pipeline/Workspace/PipelineResource
- Python基础-“百钱百鸡”入门逻辑题(刚开始的建议藏起来)
- glide源码中包含了那种设计模式_源码中的设计模式-单例模式
- Java 初学记录之一 快速输入
- Vue_(组件)计算属性
- 【数据库】mysql日期格式转换
- 微信emoji表情web显示
- 小爱同学app安卓版_小爱同学app下载安卓版-小爱同学 安卓版v2.9.50-PC6安卓网
- VUE项目初始化报[404 Not Found - GET https://r.cnpmjs.org/xxxx]
- 面试季,覆盖70%-80%的面经基础题(java及安卓)-------网络篇
- JS面向对象三大特性
- 华师计算机设计大赛,广东省首届高校大学生计算机设计大赛在华师举行
- python爬虫11 | 这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们
- 数据库常见面试题——索引
- 在局域网如何使用Git