温馨提示  2024年 6月我们已经停止开发者板块文章内容更新,谢谢来访。存档数据
知识 2023-12-11 35 次阅读

如何屏蔽 app 启动广告,让你的应用更流畅?

随着移动互联网的快速发展,app启动广告已经成为一种常常出现在大家视野里的推广方式。可是,这些广告往往会干扰用户的正常使用,甚至造成用户反感。作为开发者,我们应该站在用户的角度,积极推广app的同时,尊重用户的权益和体验。所以呢,我们需要为app启动广告屏蔽开发者制定相应的策略。首先,我们应该注重广告的形式和内容,确保广告的合规性和用户体验。然后,我们需要探索其他广告模式,例如优化广告的数量和质量,通过有效推送广告信息的方式获取收入。同时,我们也应该注意不要影响用户对app的整体印象和忠诚度。只有将用户的需求放在首位,我们才能实现真真正正的用户价值,为我们的品牌创造长期价值。所以呢,我们需要认真考虑如何推广app的同时,让用户不再被启动广告所干扰。总的来说,广告屏蔽开发者不单单是用户的需求,也是我们作为开发者的责任和义务。我们需要站在用户的角度,为app推广和用户体验做出合理的平衡和取舍。

启动广告是现在很多应用都会在加载时出现的一种广告类型,一般会展示几秒钟,用户需要等待该广告加载结束才能进入应用主界面,但是很多用户并不喜欢这样的广告,因为它不仅影响了用户体验,而且还增加了等待的时间,于是一些用户就开始寻找去除启动广告的方法,甚至一些开发者也会在自己的应用中加入去除启动广告的功能,此种情况很容易引起作为广告提供方的开发者的反感,这样的话这样的屏蔽启动广告的方法是怎样达成的呢?

一、原理介绍

1. 通过寻找广告的唯一识别符

每一个广告都会有一个唯独的标识符,一般在应用启动时会将该标识符记录下来,然后通过查找该标识符,就可以将该广告屏蔽掉,这样的方法比较简单,但只限于专为某个应用的特定版本和特定广告,因为广告商可能会不断更换标识符。

2. 拦截网络请求

总的来说,广告需要通过网络请求加载显示,所以我们可拦截应用中的网络请求,通过匹配请求的链接地址来屏蔽广告,这样的方法更加通用,但需要我们了解广告提供方的API,不只是需要要考虑到广告链接地址的匹配问题,还需要防止不必要的网络请求,以免影响用户的正常体验。

3. 修改系统文件

对于 安卓 系统,我们可通过修改 hosts 文件来屏蔽广告,因为 hosts 文件可以用来域名解析,我们可在该文件中添加广告域名的解析地址,并把它解析到本地的一个 ip 地址即可,这样所有与这个广告域名有关的请求都会被解析到本地的 ip 地址上,最终达到屏蔽广告的效果,但该方法需要获取 ROOT 权限,对于一般用户来说不太友好。

二、详细介绍

1. 查找广告识别符

我们可通过一些脚本和工具,来分析应用的代码结构,查找广告唯一识别符的位置,然后通过 hook 的方法把它替换成空字符串或随机字符串,来达到屏蔽广告的效果。

下面是一个简单的 Python 脚本实现,具体方法为通过 frida 框架 hook 应用中的字符串查找函数,判断是否为广告唯一识别符,如果是则把它替换成空字符串

```python

import frida

# hook 应用中的字符串查找函数

def on,message(message, data):

if message['type'] == 'send':

print(str(message['payload']))

if 'packed,trust,id' in str(message['payload']):

message['payload'] = message['payload'].replace('packed,trust,id: xxxxxxxxxxx', 'packed,trust,id: ')

message['payload'] = message['payload'].replace('trust,id: ', 'trust,id: xxxxxxxxxxx')

# 手机连接模拟器或真机

device = frida.get,device,manager().enumerate,devices()[-1]

# 打开应用

session = device.attach(com.example.app)

# 加载 JavaScript 脚本

with open('script.js', 'r', encoding='utf-8') as f:

script = session.create,script(f.read())

# 监听消息

script.on(message, on,message)

# 加载 JavaScript 脚本

script.load()

```

2. 拦截网络请求

我们可通过一些中间件来拦截应用内的网络请求,最终实现去除应用内的广告,这样的方法通用性强,但实现起来比较复杂,需要了解一些网络协议和相关技术,下面是 Python 中拦截 HTTP 请求的一个例子

```python

import mitmproxy.http

def request(flow: mitmproxy.http.HTTPFlow):

# 判断该请求是否为广告请求

if 'https://ad.xx.com/api' in flow.request.url:

# 如果是,则将响应体修改为 JSON 格式的字符串 {code: 0}

flow.response.text = '{code: 0}'

def response(flow: mitmproxy.http.HTTPFlow):

# 判断该响应是否为广告响应

if 'https://ad.xx.com/api' in flow.request.url:

# 如果是,则将响应体修改为 JSON 格式的字符串 {code: 0}

flow.response.text = '{code: 0}'

```

3. 修改系统文件

我们可通过修改 安卓 系统中的 hosts 文件来实现屏蔽广告的效果,这样的方法简单易行,但需要获取 ROOT 权限,下面是一个 Python 实现 hosts 文件修改的脚本

```python

import os

# 添加广告域名到 hosts 文件中

def append,hosts():

os.system('su')

os.system('echo 127.0.0.1 ad.xx.com >> /etc/hosts')

# 删除广告域名记录

def remove,hosts():

os.system('su')

os.system('sed -i /127\.0\.0\.1 ad\.xx\.com$/d /etc/hosts')

```

以上就是三种屏蔽启动广告的方法,不过这些方法都可能会影响到应用的运行,特别是修改系统文件的方法,需要慎重使用。除此之外,对于一些付费应用,存在去除广告的行为是不道德的,因为开发者只有通过广告才能得到收益,我们应该尊重其付出的劳动成果。