再见!惹人烦的 APP 开屏广告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再见!惹人烦的 APP 开屏广告相关的知识,希望对你有一定的参考价值。

参考技术A

谈到广告,果子首先想到的是,小米在 MIUI 系统中 “带头” 植入广告,随后越来越多的厂商都选择在系统中添加广告。

系统广告带来的收益可是 不容小觑, 从前段时间小米集团发布的 2020 年报就可见一斑。

得益于小米手机销量大涨,小米集团在 2020 Q4 广告收入激增,从而推动互联网服务收益增长近 20%

要知道,相比其他系统, 现在 MIUI 的广告算是很少的了

但这也同样印证了老罗的那句名言: 手机不赚钱,就是交个朋友

真正赚钱的是互联网服务中的广告营收。

而大跌眼镜的是,今年发布的魅族 18 系列, 无广告、无推送、无预装 的“三零手机”居然成为卖点。

用户本应有的权益,现在变成 “亮点” ,着实让人心寒。

并且,不仅是系统中,在大家最常用的 APP 中,同样也都充斥着杂七杂八的广告。

这些广告甚至都已经出现在了 APP 开屏页

想使用 APP ?那就先看广告吧!或点一下跳过。但有的跳过按钮做的又小又难按,稍不注意就会点击打开。

大家应该在想: 都要是有人能帮我按跳过那该多好

别说,还真的可以。废话不多说,现在就教给大家。

原理简介

快速跳过 APP 启动广告,无非就是打开 APP 时,检测跳过按钮,并瞬间自动点击,最后完成跳过广告的操作。

如何自动点击?这里就要介绍一下安卓的一项重要功能: 无障碍。

android 系统中,它的初衷是为了方便残障人士使用智能手机。

其功能包括不限于:自动点击、滑动、长按、朗读等一系列操作。

* 无障碍部分功能

得益于无障碍服务,用户无需额外的权限,可让设备实现一些自动化的操作。

使用体验

果子所介绍的自动跳广告工具,也是基于无障碍服务所实现的。

图中顺序分别为: 李跳跳、轻启动、Auto Tool、一指禅

这些工具均可 自动跳过广告。

在使用前是这样的,不得不吐槽 OPPO 的系统应用都有启动广告。

在使用自动跳过广告后。

可以看到,在广告启动页面出现的瞬间,会自动跳过该页面, 尽可能保障 用户的打开 APP 的体验。

下面就以 轻启动 为例,教大家如何使用。

正因原理简介中所提到的,首先需要开启无障碍服务。一般点击后就会自动跳转对应页面,开启即可。

* 其他工具开启方法类似

需要注意的是:开启后 需要保证工具的常运行 。强制关闭会导致无障碍服务关闭,从而 影响自动跳广告

因此建议开启 应用自启动和后台锁定

在开启服务并设置好权限后,就能正常使用了。如果遇到没有跳过的页面,还能自动提醒添加。

在使用上,果子使用的绝大部分软件均可正常跳过广告。部分漏网之鱼,还能使用自定义规则进行跳过。

此类软件在使用操作上大同小异,正确设置后即可自动跳过广告。

介绍的这些工具里,果子个人推荐的是 李跳跳

它没有任何付费功能,完全免费使用。页面简约,上手难度低。

* 主页面、设置页面、设置选项

开启服务就能立即使用。

在应用设置中,可根据需求开启对应的功能,比如:使用增强算法跳过广告、跳过青少年弹窗等。

甚至,还能帮你在登录 PC 版微信时,自动点击确认弹窗。

这里,应该有人会问:软件安全吗?会不会泄露隐私?

果子可以负责任的说: 多虑了! 应用甚至连网络权限都没有,何来的泄露?

当然,其他的工具果子也都测试过,都是安全可靠的。也不会带来额外耗电,工具的开发者也在酷安,请放心使用。

我们无法迫使众多 APP 去除启动广告,但作为用户可以最大程度争取自己应有的权利。

* 纯净的启动页是微信最美的风景线

也希望众多互联网厂商能够注重用户体验。就如同微信这般,十年如一日,不添加任何启动广告。

如何在我的应用启动界面实现「开屏广告」?

什么是开屏广告

开屏广告是一种在应用启动时且在应用主界面显示之前需要被展示的广告。一般是5s展示时间,广告展示时间结束后自动进入应用,用户可以点击跳过按钮直接进入主界面。

开屏广告示例

1

开屏广告的优势

位置优势:用户在进入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、应用内添加贴片广告

 

>>访问华为广告服务官网,了解更多相关内容

>>获取华为广告服务开发指导文档

>>访问华为开发者联盟官网,了解更多相关内容

>>获取开发指导文档

>>华为移动服务开源仓库地址:GitHubGitee

关注我们,第一时间了解华为移动服务最新技术资讯~

以上是关于再见!惹人烦的 APP 开屏广告的主要内容,如果未能解决你的问题,请参考以下文章

互联网电视无处不在的广告惹人烦,消费者转投传统电视怀抱

app开屏广告

❤️和广告说再见,将“沉浸式阅读”进行到底❤️

Android进阶(二十七)Android原生扰人烦的布局

再见 CSDN

再见 CSDN