4a8a84a4eb
- 实现定时按钮倒计时显示功能 - 适配pixel主题化图标展示 - 优化TimerDialog按钮宽度设计
266 lines
6.4 KiB
Markdown
266 lines
6.4 KiB
Markdown
# 广告拦截功能说明
|
||
|
||
## 📌 功能概述
|
||
|
||
XMBOX内置了强大的广告拦截系统,可以有效过滤视频播放过程中弹出的各类广告,特别是常见的赌博广告(如澳门新葡京、皇冠、金沙等)。
|
||
|
||
## 🎯 拦截类型
|
||
|
||
### 1. 赌博类广告 ⭐⭐⭐⭐⭐
|
||
**最常见的视频中途弹窗广告**
|
||
|
||
包括但不限于:
|
||
- 澳门新葡京、皇冠、金沙、威尼斯人、永利等博彩品牌
|
||
- 各类赌场、扑克、投注网站
|
||
- 使用 `xpj`、`wnsr`、`js[数字]`、`vn[数字]` 等域名的赌博网站
|
||
|
||
**特征**:通常在视频播放到一半时突然弹出,覆盖整个播放器
|
||
|
||
### 2. 广告联盟
|
||
- Google广告联盟(DoubleClick、AdSense等)
|
||
- 百度广告联盟
|
||
- 淘宝/阿里广告联盟
|
||
- 腾讯广告联盟
|
||
|
||
### 3. 视频平台广告
|
||
- 优酷、爱奇艺、腾讯视频等平台的贴片广告
|
||
- 芒果TV、乐视等平台广告
|
||
|
||
### 4. 弹窗广告
|
||
- 页面加载时的弹窗
|
||
- 点击播放时的诱导弹窗
|
||
|
||
### 5. 跟踪统计
|
||
- 百度统计、Google Analytics
|
||
- CNZZ、友盟等统计代码
|
||
|
||
## 🔧 使用方法
|
||
|
||
### 方式一:内置拦截(推荐)✅
|
||
|
||
**无需任何配置**,应用已内置200+常见广告域名,包括:
|
||
|
||
```java
|
||
// 已内置的赌博广告域名示例
|
||
".*\\..*葡京.*" // 拦截所有包含"葡京"的域名
|
||
".*\\..*皇冠.*" // 拦截所有包含"皇冠"的域名
|
||
".*xpj.*\\..*" // 拦截新葡京相关域名
|
||
"wan.51img1.com" // 常见广告CDN
|
||
"vip.ffzyad.com" // 视频广告域名
|
||
```
|
||
|
||
### 方式二:自定义拦截
|
||
|
||
在配置文件中添加 `ads` 字段:
|
||
|
||
```json
|
||
{
|
||
"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层拦截
|
||
```java
|
||
// 在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. 正则表达式匹配
|
||
|
||
```json
|
||
{
|
||
"ads": [
|
||
".*\\.ad.*\\.com", // 匹配 sub.adserver.com
|
||
".*gambling.*", // 匹配任何包含gambling的域名
|
||
"^https?://[^/]*ad[^/]*/" // 匹配URL中包含ad的路径
|
||
]
|
||
}
|
||
```
|
||
|
||
### 2. 分类管理
|
||
|
||
建议按类型组织广告域名:
|
||
|
||
```json
|
||
{
|
||
"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:** 完全不会:
|
||
- 所有拦截在本地进行
|
||
- 不联网、不上传
|
||
- 完全保护您的隐私
|
||
|
||
## 🔍 调试方法
|
||
|
||
### 查看拦截日志
|
||
|
||
启用调试模式可以看到被拦截的域名:
|
||
|
||
```bash
|
||
# 连接设备
|
||
adb logcat | grep "WebView\|AdBlocker"
|
||
|
||
# 查看拦截记录
|
||
adb logcat | grep "blocked"
|
||
```
|
||
|
||
### 测试广告拦截
|
||
|
||
1. 访问包含广告的视频网站
|
||
2. 观察是否弹出广告
|
||
3. 检查日志中的拦截记录
|
||
|
||
## 📚 域名库维护
|
||
|
||
### 添加新的广告域名
|
||
|
||
编辑 `AdBlocker.java`:
|
||
|
||
```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. 🛡️ **片头片尾跳过** - 处理嵌入式广告
|
||
|
||
让您享受**纯净、流畅、安全**的视频观看体验!
|
||
|