Flutter广告拦截检测插件adblock_detector的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter广告拦截检测插件adblock_detector的使用

插件简介

adblock_detector 是一个跨平台的Flutter插件,用于检测用户是否启用了广告拦截器。它能够检查用户是否启用了DNS级别的广告拦截(如PiHole、AdGuard DNS、uBlock、Brave Shields等),并提供了一些内置的广告网络检测选项。

Logo

功能特性

  • 检测用户是否启用了DNS级别的广告拦截器(如PiHole、AdGuard DNS、uBlock、Brave Shields等)。
  • 检测用户是否启用了AdGuard DNS。

使用注意事项

请负责任地使用此插件!

使用方法

基本用法

import 'package:adblock_detector/adblock_detector.dart';

void checkAdBlock() async {
  AdBlockDetector adBlockDetector = AdBlockDetector();

  bool isAdblocking = await adBlockDetector.isAdBlockEnabled(
    testAdNetworks: [AdNetworks.googleAdMob],
  );

  print('AdBlock detected: $isAdblocking');
}

内置广告网络

插件提供了以下内置的广告网络:

  • AdNetworks.googleAdMob
  • AdNetworks.mediaNet
  • AdNetworks.appSumari
  • AdNetworks.startApp
  • AdNetworks.adColony

请注意,某些广告网络在某些国家/地区可能被阻止(例如,在中国Google AdMob不会被阻止)。

自定义广告网络

您还可以传递自定义的广告网络进行检测:

import 'package:adblock_detector/adblock_detector.dart';

void checkCustomAdBlock() async {
  AdBlockDetector adBlockDetector = AdBlockDetector();

  bool isAdblocking = await adBlockDetector.isAdBlockEnabled(
    testAdNetworks: [],
    customAdNetworks: [Uri.parse('https://a-test-url-for-the-adnetwork.com')],
  );

  print('AdBlock detected: $isAdblocking');
}

检查网络连接

默认情况下,插件会尝试发送GET请求到https://example.com以检查是否有互联网连接。如果未检测到互联网连接,isAdBlockEnabled()将返回false以防止误报。

您可以更改测试URL:

import 'package:adblock_detector/adblock_detector.dart';

void checkAdBlockWithCustomTestHost() async {
  AdBlockDetector adBlockDetector = AdBlockDetector();

  adBlockDetector.testHost = Uri.parse('https://cdn.vibin.llc/test.txt');

  bool isAdblocking = await adBlockDetector.isAdBlockEnabled(
    testAdNetworks: [AdNetworks.googleAdMob],
  );

  print('AdBlock detected: $isAdblocking');
}

确保URL有效,并返回200状态码。

检查用户是否使用AdGuard DNS

import 'package:adblock_detector/adblock_detector.dart';

void checkAdGuardDNS() async {
  AdBlockDetector adBlockDetector = AdBlockDetector();

  bool isAdGuardDns = await adBlockDetector.isAdguardDNS();

  print('AdGuard DNS detected: $isAdGuardDns');
}

示例代码

以下是一个完整的示例应用,展示了如何使用adblock_detector插件:

import 'package:adblock_detector/adblock_detector.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Adblock Detector Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Adblock Detector Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text('Press the button below to check for Adblock'),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton.extended(
        onPressed: () async {
          print('btn click');
          AdBlockDetector adBlockDetector = AdBlockDetector();
          print('testing adblock...');

          bool isAdblocking = await adBlockDetector.isAdBlockEnabled(
            testAdNetworks: [AdNetworks.googleAdMob],
          );

          print('adblock test complete with value: $isAdblocking');

          if (isAdblocking) {
            showDialog<void>(
              context: context,
              barrierDismissible: false,
              builder: (BuildContext context) {
                return AlertDialog(
                  title: const Text('AdBlock Detected'),
                  content: const SingleChildScrollView(
                    child: ListBody(
                      children: <Widget>[
                        Text('Adblock is detected on your device'),
                        Text('Would you like check if user is connected to AdGuard DNS?'),
                      ],
                    ),
                  ),
                  actions: <Widget>[
                    TextButton(
                      child: const Text('Check AdGuard DNS'),
                      onPressed: () async {
                        bool isAdGuardDns = await adBlockDetector.isAdguardDNS();

                        showDialog<void>(
                          context: context,
                          barrierDismissible: false,
                          builder: (BuildContext context) {
                            return AlertDialog(
                              title: Text('AdGuard DNS ${isAdGuardDns ? 'Detected' : 'Not Detected'}'),
                              actions: <Widget>[
                                TextButton(
                                  child: const Text('Close'),
                                  onPressed: () {
                                    Navigator.of(context).pop();
                                  },
                                ),
                              ],
                            );
                          },
                        );
                      },
                    ),
                    TextButton(
                      child: const Text('Close'),
                      onPressed: () {
                        Navigator.of(context).pop();
                      },
                    ),
                  ],
                );
              },
            );
          } else {
            showDialog<void>(
              context: context,
              barrierDismissible: false,
              builder: (BuildContext context) {
                return AlertDialog(
                  title: const Text('No AdBlock Detected'),
                  actions: <Widget>[
                    TextButton(
                      child: const Text('Close'),
                      onPressed: () {
                        Navigator.of(context).pop();
                      },
                    ),
                  ],
                );
              },
            );
          }
        },
        label: const Text('Run Adblock Detector'),
      ),
    );
  }
}

这个示例应用包含了一个浮动按钮,点击后会检测设备是否启用了广告拦截,并根据结果弹出相应的对话框。


更多关于Flutter广告拦截检测插件adblock_detector的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter广告拦截检测插件adblock_detector的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用adblock_detector插件的详细代码示例。adblock_detector插件用于检测用户是否启用了广告拦截器。

1. 添加依赖

首先,在您的Flutter项目的pubspec.yaml文件中添加adblock_detector依赖:

dependencies:
  flutter:
    sdk: flutter
  adblock_detector: ^最新版本号  # 请替换为实际最新版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在需要使用广告拦截检测功能的Dart文件中导入插件:

import 'package:adblock_detector/adblock_detector.dart';

3. 使用插件

以下是一个简单的示例,展示了如何初始化插件并检测广告拦截器:

import 'package:flutter/material.dart';
import 'package:adblock_detector/adblock_detector.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter AdBlock Detector Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool isAdBlockEnabled = false;

  @override
  void initState() {
    super.initState();
    _checkAdBlock();
  }

  Future<void> _checkAdBlock() async {
    try {
      bool result = await AdblockDetector.isAdblockActive();
      setState(() {
        isAdBlockEnabled = result;
      });
    } catch (e) {
      print("Error checking adblock: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('AdBlock Detector Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'AdBlock Enabled: ${isAdBlockEnabled ? "Yes" : "No"}',
              style: TextStyle(fontSize: 24),
            ),
          ],
        ),
      ),
    );
  }
}

4. 运行应用

确保您的开发环境已经正确配置,然后运行应用:

flutter run

注意事项

  • 权限:该插件在Android和iOS上都不需要额外的权限,但请确保您的应用符合各平台的隐私政策。
  • 错误处理:在实际应用中,您可能需要更详细的错误处理逻辑,以应对可能的异常情况。
  • 版本更新:定期查看adblock_detector插件的更新日志,以确保您使用的是最新版本,并获取最新的功能和修复。

通过上述步骤,您可以在Flutter应用中集成并使用adblock_detector插件来检测广告拦截器。

回到顶部