Files
XMBOX/docs/AD_BLOCKING.md
T
您的名字 4a8a84a4eb feat: 升级到v3.1.0
- 实现定时按钮倒计时显示功能
- 适配pixel主题化图标展示
- 优化TimerDialog按钮宽度设计
2025-10-28 19:49:49 +08:00

6.4 KiB
Raw Permalink Blame History

广告拦截功能说明

📌 功能概述

XMBOX内置了强大的广告拦截系统,可以有效过滤视频播放过程中弹出的各类广告,特别是常见的赌博广告(如澳门新葡京、皇冠、金沙等)。

🎯 拦截类型

1. 赌博类广告

最常见的视频中途弹窗广告

包括但不限于:

  • 澳门新葡京、皇冠、金沙、威尼斯人、永利等博彩品牌
  • 各类赌场、扑克、投注网站
  • 使用 xpjwnsrjs[数字]vn[数字] 等域名的赌博网站

特征:通常在视频播放到一半时突然弹出,覆盖整个播放器

2. 广告联盟

  • Google广告联盟(DoubleClick、AdSense等)
  • 百度广告联盟
  • 淘宝/阿里广告联盟
  • 腾讯广告联盟

3. 视频平台广告

  • 优酷、爱奇艺、腾讯视频等平台的贴片广告
  • 芒果TV、乐视等平台广告

4. 弹窗广告

  • 页面加载时的弹窗
  • 点击播放时的诱导弹窗

5. 跟踪统计

  • 百度统计、Google Analytics
  • CNZZ、友盟等统计代码

🔧 使用方法

方式一:内置拦截(推荐)

无需任何配置,应用已内置200+常见广告域名,包括:

// 已内置的赌博广告域名示例
".*\\..*葡京.*"      // 拦截所有包含"葡京"的域名
".*\\..*皇冠.*"      // 拦截所有包含"皇冠"的域名
".*xpj.*\\..*"       // 拦截新葡京相关域名
"wan.51img1.com"     // 常见广告CDN
"vip.ffzyad.com"     // 视频广告域名

方式二:自定义拦截

在配置文件中添加 ads 字段:

{
  "spider": "your_spider_url",
  "sites": [...],
  
  "ads": [
    "精确域名匹配",
    "example-ad.com",
    "another-ad-domain.net",
    
    "通配符匹配",
    ".*\\.advertisement\\..*",
    ".*\\.ad-server\\..*",
    
    "关键词匹配",
    ".*赌博.*",
    ".*博彩.*"
  ]
}

方式三:片头片尾跳过 🎬

对于嵌入视频流中的广告(无法通过域名拦截),使用片头片尾跳过功能:

设置片头跳过

  1. 播放视频
  2. 在片头广告结束后(前5分钟内),点击 【片头】 按钮
  3. 当前时间点会被记录
  4. 下次播放时自动从这个时间点开始

设置片尾跳过

  1. 播放到片尾广告开始前(后5分钟内),点击 【片尾】 按钮
  2. 当前时间点会被记录
  3. 下次播放时会在这个时间点停止

重置设置

长按 【片头】【片尾】 按钮即可重置

📝 工作原理

WebView层拦截

// 在WebView加载资源时拦截
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
    String host = request.getUrl().getHost();
    
    // 检查是否为广告域名
    if (isAd(host)) {
        // 返回空响应,阻止广告加载
        return emptyResponse;
    }
    
    return super.shouldInterceptRequest(view, request);
}

拦截流程

视频请求 → 检查域名 → 内置黑名单? → 是 → 拦截 ❌
                  ↓
                  否
                  ↓
         用户自定义黑名单? → 是 → 拦截 ❌
                  ↓
                  否
                  ↓
              允许加载 ✅

🛠️ 高级配置

1. 正则表达式匹配

{
  "ads": [
    ".*\\.ad.*\\.com",           // 匹配 sub.adserver.com
    ".*gambling.*",              // 匹配任何包含gambling的域名
    "^https?://[^/]*ad[^/]*/"    // 匹配URL中包含ad的路径
  ]
}

2. 分类管理

建议按类型组织广告域名:

{
  "ads": [
    "// === 赌博广告 ===",
    ".*葡京.*",
    ".*casino.*",
    
    "// === 视频平台广告 ===",
    "atm.youku.com",
    "cupid.iqiyi.com",
    
    "// === 弹窗广告 ===",
    "mimg.0c1q0l.cn",
    "www.92424.cn"
  ]
}

📊 效果统计

启用广告拦截后,您可以看到:

  • 视频播放更流畅
  • 无中途弹窗干扰
  • 隐私数据不被跟踪
  • 节省流量消耗

常见问题

Q1: 为什么有些广告还是会出现?

A: 可能的原因:

  1. 广告直接嵌入视频流(使用片头片尾跳过)
  2. 广告使用了新的域名(可添加到自定义黑名单)
  3. 广告通过JavaScript动态生成(内容层广告,较难拦截)

Q2: 会不会误拦截正常内容?

A: 内置域名库经过精心筛选,主要针对已知广告域名。误拦截概率极低。如遇到问题,可以:

  • 关闭内置拦截(需修改代码)
  • 反馈给开发者更新黑名单

Q3: 如何找到广告的域名?

A: 方法:

  1. 使用Chrome浏览器开发者工具(F12)查看Network请求
  2. 查看应用日志输出的URL
  3. 参考其他用户分享的广告域名列表

Q4: 拦截会影响性能吗?

A: 影响极小:

  • 仅在WebView解析阶段生效
  • 字符串匹配操作非常快速
  • 反而会因为减少网络请求而提升性能

Q5: 数据会被上传吗?

A: 完全不会:

  • 所有拦截在本地进行
  • 不联网、不上传
  • 完全保护您的隐私

🔍 调试方法

查看拦截日志

启用调试模式可以看到被拦截的域名:

# 连接设备
adb logcat | grep "WebView\|AdBlocker"

# 查看拦截记录
adb logcat | grep "blocked"

测试广告拦截

  1. 访问包含广告的视频网站
  2. 观察是否弹出广告
  3. 检查日志中的拦截记录

📚 域名库维护

添加新的广告域名

编辑 AdBlocker.java

private static final List<String> GAMBLING_ADS = Arrays.asList(
    // 添加新发现的广告域名
    "new-casino-ad.com",
    ".*new-gambling.*"
);

提交贡献

如果您发现新的广告域名,欢迎:

  1. 提交Issue报告
  2. 提交Pull Request更新域名库
  3. 在社区分享

💡 最佳实践

  1. 优先使用内置拦截 - 已覆盖大部分常见广告
  2. 补充自定义规则 - 针对特定视频源的广告
  3. 善用片头片尾跳过 - 处理嵌入式广告
  4. 定期更新 - 保持应用最新版本以获取最新域名库

🎉 总结

XMBOX的广告拦截系统通过三层防护

  1. 🛡️ 内置域名库 - 200+常见广告(含澳门新葡京等赌博广告)
  2. 🛡️ 自定义黑名单 - 用户针对性添加
  3. 🛡️ 片头片尾跳过 - 处理嵌入式广告

让您享受纯净、流畅、安全的视频观看体验!