Flutter域名验证管理插件domain_verification_manager的使用

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

Flutter域名验证管理插件domain_verification_manager的使用

插件介绍

domain_verification_manager 插件暴露了一些方法来检查Android App Links验证状态,通过使用 DomainVerificationManager API。此插件仅适用于Android 12(S - API Level 31)及以上版本。较旧的版本会抛出 WRONG_SDK_VERSION 错误,而其他平台将返回 UnsupportedError

你可以使用 await DomainVerificationManager.isSupported 来检查当前平台和API版本是否受支持。

以下是该插件的功能:

  • 获取已通过Android App Links验证的域名 (domainStageVerified)
  • 获取未通过Android App Links验证但用户手动关联的应用的域名 (domainStageSelected)
  • 获取所有其他域名 (domainStageNone)
  • 打开应用设置页面,用户可以在其中手动授予权限 (domainRequest)

完整示例Demo

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

import 'dart:async';
import 'package:after_layout/after_layout.dart';
import 'package:domain_verification_manager/domain_verification_manager.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with AfterLayoutMixin<MyApp> {
  String _isSupported = 'Unknown';
  String _domainStateVerified = 'Unknown';
  String _domainStateSelected = 'Unknown';
  String _domainStateNone = 'Unknown';

  // 在布局首次绘制后调用
  [@override](/user/override)
  FutureOr<void> afterFirstLayout(BuildContext context) async {
    if (await getIsSupported()) {
      getDomainStageVerified();  // 获取已验证的域名
      getDomainStateSelected();  // 获取用户手动关联的域名
      getDomainStateNone();      // 获取未验证且未关联的域名
    }
  }

  // 检查当前平台和API版本是否支持
  Future<bool> getIsSupported() async {
    String result;
    bool _supported = false;
    try {
      _supported = await DomainVerificationManager.isSupported;  // 检查支持性
      result = _supported.toString();
    } on PlatformException {
      result = 'Failed to get getIsSupported';  // 如果失败则显示错误信息
    }
    if (!mounted) {
      _isSupported = result;
      return _supported;
    }

    setState(() {
      _isSupported = result;  // 更新支持性状态
    });

    return _supported;
  }

  // 获取已验证的域名
  Future<void> getDomainStageVerified() async {
    String result;
    try {
      result = (await DomainVerificationManager.domainStageVerified).toString();  // 获取已验证的域名列表
    } on PlatformException {
      result = 'Failed to get domainStageVerified';  // 如果失败则显示错误信息
    }
    if (!mounted) {
      _domainStateVerified = result;
      return;
    }

    setState(() {
      _domainStateVerified = result;  // 更新已验证的域名状态
    });
  }

  // 获取用户手动关联的域名
  Future<void> getDomainStateSelected() async {
    String result;
    try {
      result = (await DomainVerificationManager.domainStageSelected).toString();  // 获取用户手动关联的域名列表
    } on PlatformException {
      result = 'Failed to get domainStageSelected';  // 如果失败则显示错误信息
    }
    if (!mounted) {
      _domainStateSelected = result;
      return;
    }

    setState(() {
      _domainStateSelected = result;  // 更新用户手动关联的域名状态
    });
  }

  // 获取未验证且未关联的域名
  Future<void> getDomainStateNone() async {
    String result;
    try {
      result = (await DomainVerificationManager.domainStageNone).toString();  // 获取未验证且未关联的域名列表
    } on PlatformException {
      result = 'Failed to get domainStageNone';  // 如果失败则显示错误信息
    }
    if (!mounted) {
      _domainStateNone = result;
      return;
    }

    setState(() {
      _domainStateNone = result;  // 更新未验证且未关联的域名状态
    });
  }

  // 打开应用设置页面,用户可以手动授予权限
  Future<void> domainRequest() async {
    await DomainVerificationManager.domainRequest();  // 打开应用设置页面
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('域名验证管理器'),  // 设置AppBar标题
        ),
        body: Padding(
          padding: const EdgeInsets.only(top: 12.0),
          child: Center(
            child: Column(
              children: [
                Text(
                  '支持: $_isSupported\n\n',  // 显示支持性状态
                  textAlign: TextAlign.center,
                ),
                Text(
                  '已验证:\n$_domainStateVerified\n\n',  // 显示已验证的域名状态
                  textAlign: TextAlign.center,
                ),
                Text(
                  '未验证,但用户关联了链接:\n$_domainStateSelected\n\n',  // 显示用户手动关联的域名状态
                  textAlign: TextAlign.center,
                ),
                Text(
                  '未验证且未关联到应用:\n$_domainStateNone\n\n',  // 显示未验证且未关联的域名状态
                  textAlign: TextAlign.center,
                ),
                ElevatedButton(
                  onPressed: domainRequest,  // 点击按钮打开应用设置页面
                  child: const Text('请求'),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter域名验证管理插件domain_verification_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter域名验证管理插件domain_verification_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用domain_verification_manager插件的示例代码。请注意,这个插件的具体实现和API可能会根据版本的不同而有所变化,因此请参考最新的官方文档以获取最准确的信息。

首先,你需要在你的pubspec.yaml文件中添加这个插件的依赖:

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

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

接下来,你可以在你的Flutter项目中使用这个插件。以下是一个简单的示例,展示了如何使用domain_verification_manager进行域名验证管理。

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String verificationResult = "";

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

  Future<void> _verifyDomain() async {
    final DomainVerificationManager domainVerificationManager = DomainVerificationManager();
    
    try {
      // 假设你有一个待验证的域名列表
      List<String> domainsToVerify = ["example.com", "test.com"];
      
      // 验证域名
      bool isVerified = await domainVerificationManager.verifyDomains(domainsToVerify);
      
      setState(() {
        verificationResult = isVerified ? "域名验证成功" : "域名验证失败";
      });
    } catch (e) {
      // 处理异常
      setState(() {
        verificationResult = "验证过程中发生错误: ${e.toString()}";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('域名验证管理示例'),
        ),
        body: Center(
          child: Text(verificationResult),
        ),
      ),
    );
  }
}

注意

  1. 上面的代码是一个简化的示例,用于展示如何使用domain_verification_manager插件的基本流程。实际上,verifyDomains方法可能不存在于这个插件中(具体取决于插件的实现),或者其参数和返回值可能有所不同。因此,你需要查阅插件的官方文档来了解正确的API使用方式。

  2. 域名验证通常涉及与服务器端的通信,因此你可能需要配置后端服务来处理验证请求。这个示例没有展示与后端服务的交互,因为它取决于你的具体实现。

  3. 在实际项目中,请确保处理各种可能的异常情况,包括网络错误、验证失败等。

  4. 由于domain_verification_manager插件可能不是官方或广泛使用的插件,因此在使用之前,请务必检查其源代码、文档和用户评价,以确保其可靠性和安全性。

  5. 如果插件没有提供你需要的API,或者你不满意其实现,你可能需要自己实现域名验证逻辑,或者寻找其他更适合的插件。

回到顶部