Blindfold

iPhone App 内的广告能屏蔽吗?技术上到底能做到什么程度

搜索「iPhone App 广告拦截」,你会翻出一长串 App,个个都承诺能把手机上所有地方的广告都干掉:游戏里、流媒体 App 里、iOS 的每个角落。在你下载任何一款之前,先看这个诚实的答案。App Store 上没有任何一款 App 能完全屏蔽第三方 App 在自己屏幕内绘制的广告。搞清楚原因,能帮你避免买到一款做不到宣传图上那些效果的产品。

这不代表就完全没办法。真正的答案分成两部分:iOS 上技术上不可能做到的事,以及真正管用的办法。Blindfold 就是为第二部分打造的,所以这篇文章既是在讲技术,也是在跟你说实话。

为什么没有 App 能伸进另一个 App 的广告里

iOS 把每个 App 都关在自己的沙盒里。一个 App 可以读写自己的文件、访问网络、绘制自己的界面,但它没有任何办法去查看或修改另一个 App 在屏幕上渲染出来的内容,也没有任何钩子能拦截那个 App 内部发起的广告网络请求。这种隔离是故意设计出来的,也是 iOS 相比那些 App 之间访问更松散的平台,恶意软件和间谍软件问题少得多的重要原因。

像 Blindfold 这类广告拦截器所使用的 Safari 扩展接口,也就是内容拦截器和 Safari 网页扩展,作用范围被严格限定在 Safari 的渲染引擎里。苹果设计这些接口,是为了让扩展能提供拦截规则或隐藏页面元素,同时完全看不到你的浏览记录,而这个范围到 Safari 为止。没有任何对等的接口能让一个已安装的 App 伸进某款游戏的界面,或是拦截某个免费 App 在关卡之间用来展示横幅广告的广告 SDK。如果哪款 App 声称自己能不加任何限制地做到「系统级」屏蔽,那它说的已经超出了 iOS 允许的范围。

系统级 DNS 和 VPN 广告拦截器到底能做什么

确实存在一类比 Safari 拦截范围更广的 App:基于 DNS 和 VPN 的拦截器。iOS 允许 App 安装本地 VPN 描述文件,把设备的网络流量在离开手机之前,先经过设备本地的一层过滤。这层过滤会拿每个请求要访问的域名,和已知广告及跟踪网络的黑名单做比对,一旦命中就直接断开连接。

这确实能挡住一部分 App 内广告。如果某款游戏的广告 SDK 请求的是一个知名广告网络域名,这层过滤就可以拒绝解析它,广告也就加载不出来。这是一种真实、有用的能力,也是目前最接近「系统级 iPhone App 广告拦截器」这个说法的东西。

不过它也有真实的代价:

  • 它看不到加密的 HTTPS 流量内部。它只知道某个请求要去哪个域名,不知道页面或广告里到底有什么内容。所以它只能整体拦截或放行一个域名,写不出像 Safari 内容拦截器那样「只隐藏这一个元素」的精细规则。
  • 广告和正常的 App 功能越来越经常共用同一个域名和基础设施。为了拦一条广告而封掉某个域名,也可能顺带弄坏登录流程、视频播放器,或是恰好走这条线路的推送通知。
  • 它需要 VPN 描述文件一直保持运行才能起作用,这和一个可以一键关闭的 Safari 扩展相比,是完全不同性质的授权。

这些都不代表基于 DNS 的拦截方式不好,只是说明它天生就是一种更粗放的工具,受限于它在技术上能看到的东西有限。

Blindfold 能完全覆盖的范围

只要是加载在 Safari 真正渲染引擎里的内容,都在 Blindfold 内容拦截器的管辖范围之内,而这个范围比大多数人以为的更大。它不只包括 Safari 本身,还包括 Safari 视图控制器,也就是 App 用来打开网页链接、而不把你直接甩到 Safari 里的那个应用内浏览页面。当邮件、信息或某款新闻 App 用这个页面打开一篇文章时,它底层跑的其实还是 Safari 的引擎,所以同样的内容拦截规则会自动生效。打开链接的那个 App 不需要做任何特殊处理,也没法选择退出这套规则。

这覆盖了相当一大部分真实的浏览场景:文章、博客、购物网站,以及你从任何 App 里点开链接后落地的大多数网页内容,不管发链接的是哪个 App。它覆盖不到的,是某款游戏自带的原生广告横幅,或是直接织进 App 界面里、而不是网页里的广告 SDK。这就是沙盒的边界,任何基于 Safari 的拦截器,包括 Blindfold,都跨不过去。

诚实的答案

如果你想去掉的广告,就藏在某个游戏或 App 自己的界面里,基于 Safari 的拦截器碰不到它们。现实中你能做的选择,是那个 App 自己提供的去广告付费方案,或者是一款 DNS/VPN 拦截器,它能在域名层面拦下一部分,但也有上面说到的那些代价。

如果困扰你的广告和跟踪器,是出现在你用 iPhone 上网的过程中,不管是在 Safari 里,还是在其他 App 打开的应用内浏览页面里,这部分问题今天就能完全解决。我们的iPhone 屏蔽广告完整指南讲了这半部分问题所有真正管用的方法,包括内容拦截器、Safari 网页扩展和 DNS 描述文件是怎么配合起作用的。

Blindfold 负责的是 Safari 这一侧:在 Safari 和任何 Safari 视图控制器页面里,原生拦截广告、跟踪器和页面干扰内容,完全在你的设备本地运行,每一条规则都能在 App 里查看和编辑。30 天免费试用,之后 $7.99/年或一次性 $19.99,支持家人共享,无需注册账号。前往 App Store 获取 Blindfold,或者到首页看看它的实际效果。