Flutter安全浏览插件safe_browsing的使用

Flutter安全浏览插件safe_browsing的使用

使用google安全浏览API来检测URL是否安全。

必要条件

确保在Google云控制台中启用了安全浏览API:

使用方法

该插件需要你使用 flutterfire_cli 创建 DefaultFirebaseOptions。更多详情请参阅 官方文档

创建实例

/// 从 `DefaultFirebaseOptions` 创建实例
/// 此类由 `flutterfire_cli` 创建
final safeBrowsing = SafeBrowsing(
  options: DefaultFirebaseOptions.currentPlatform,
  isDebug: !kReleaseMode,
);

/// 想要检查的URL
final url = 'https://example.com';

/// 检查URL是否安全并返回 `SafeBrowsingState`
final state = await safeBrowsing.checkUrl(url);

/// 检查URL是否安全并返回 `bool`
final isSafe = await safeBrowsing.isUrlSafe(url);

检查结果的状态

state.isSafe // 表示结果是安全的
state.isNotSafe // 表示结果不安全。与 `!state.isSafe` 不同,因为可能会发生 `state.isError`
state.isError // 表示请求存在问题

请注意,!state.isSafestate.isNotSafe 是不同的,因为 state.isError 可能会发生。

更具体的检查结果通过使用 state.type

/// 安全
SafeBrowsingStateType.safe

/// 不安全。查看 `state.matches` 获取详细信息。
SafeBrowsingStateType.notSafe

/// 输入为空
SafeBrowsingStateType.empty

/// 请求错误
SafeBrowsingStateType.requestError

/// 未知错误
SafeBrowsingStateType.unknown

state.isNotSafe 时获取威胁匹配列表

final listThreatMatches = state.matches;

高级用法

/// 检查条目
final state = await safeBrowsing.check(
  [ThreatEntry(url: 'url')],

  threatTypes: [
      ThreatType.MALWARE,
      ThreatType.SOCIAL_ENGINEERING,
      ThreatType.UNWANTED_SOFTWARE,
      ThreatType.POTENTIALLY_HARMFUL_APPLICATION,    
  ],

  platformTypes: [
      PlatformType.ALL_PLATFORMS,    
  ], 

  threatEntryTypes: [
      ThreatEntryType.URL,
  ],
);

额外功能

使用此方法验证URL:

SafeBrowsing.validateUrl(url);

示例代码

以下是完整的示例代码:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  /// 从 `DefaultFirebaseOptions` 创建实例
  /// 此类由 `flutterfire_cli` 创建
  final safeBrowsing = SafeBrowsing(
    options: DefaultFirebaseOptions.currentPlatform,
    isDebug: !kReleaseMode,
  );

  runApp(MyApp(safeBrowsing: safeBrowsing));
}

class MyApp extends StatelessWidget {
  final SafeBrowsing safeBrowsing;

  MyApp({required this.safeBrowsing});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Safe Browsing Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              final url = 'https://example.com';
              
              /// 检查URL是否安全并返回 `SafeBrowsingState`
              final state = await safeBrowsing.checkUrl(url);
              
              /// 检查URL是否安全并返回 `bool`
              final isSafe = await safeBrowsing.isUrlSafe(url);
              
              if (state.isSafe) {
                print('$url is safe');
              } else if (state.isNotSafe) {
                print('$url is not safe');
              } else if (state.isError) {
                print('There was an error checking $url');
              }
            },
            child: Text('Check URL Safety'),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter安全浏览插件safe_browsing的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter安全浏览插件safe_browsing的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter安全浏览插件safe_browsing的使用,这里提供一个基本的代码案例来展示如何集成和使用该插件进行安全浏览检查。请注意,实际使用中可能需要根据具体需求进行调整和完善。

首先,确保你已经在Flutter项目中添加了safe_browsing插件。在你的pubspec.yaml文件中添加以下依赖:

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

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

接下来,是一个简单的示例代码,展示如何使用safe_browsing插件来检查URL的安全性:

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

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

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

class SafeBrowsingScreen extends StatefulWidget {
  @override
  _SafeBrowsingScreenState createState() => _SafeBrowsingScreenState();
}

class _SafeBrowsingScreenState extends State<SafeBrowsingScreen> {
  final SafeBrowsing _safeBrowsing = SafeBrowsing();
  String _urlToCheck = "https://example.com";  // 替换为你想检查的URL
  String _result = "";

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

  Future<void> _checkUrlSafety() async {
    try {
      bool isSafe = await _safeBrowsing.checkUrl(_urlToCheck);
      setState(() {
        _result = isSafe ? "The URL is safe." : "The URL is potentially unsafe.";
      });
    } catch (e) {
      setState(() {
        _result = "Error checking URL: ${e.message}";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Safe Browsing Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(
                labelText: 'Enter URL to check',
                border: OutlineInputBorder(),
              ),
              onChanged: (value) {
                _urlToCheck = value;
                // 每次URL变化时重新检查(可选,根据需求调整)
                _checkUrlSafety();
              },
            ),
            SizedBox(height: 20),
            Text(
              _result,
              style: TextStyle(fontSize: 18),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个Flutter应用,并在主屏幕SafeBrowsingScreen中集成safe_browsing插件。
  2. 初始时,我们设置了一个要检查的URL(_urlToCheck),并在initState中调用_checkUrlSafety方法来检查该URL的安全性。
  3. _checkUrlSafety方法使用_safeBrowsing.checkUrl来异步检查URL的安全性,并根据结果更新UI。
  4. 用户还可以通过输入框输入不同的URL,并在每次输入变化时触发新的安全性检查(这是可选的,你可以根据实际需求调整)。

请注意,实际使用时,你可能需要处理更多的边缘情况和错误处理,比如网络错误、无效的URL输入等。此外,safe_browsing插件的具体实现和API可能会有所变化,请参考其官方文档以获取最新和最准确的信息。

回到顶部