Flutter身份验证与Web视图集成插件auth_webview_sdk的使用

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

Flutter身份验证与Web视图集成插件auth_webview_sdk的使用

获取开始

auth_webview_sdk 是一个用于 Flutter 的插件,它提供了一个 Skillmine 身份验证的 Web 视图小部件。此插件支持以下 SDK 版本:

  • Android 19+ 或 20+
  • iOS 12.0+

使用方法

要使用 auth_webview_sdk 插件显示一个 Web 视图,请按照以下步骤操作:

  1. 首先定义一个空的访问令牌:
late final accessToken;
  1. 在点击事件中或直接在您的 Scaffold 中添加以下代码:
Navigator.push(
    context,
    MaterialPageRoute(
        builder: (context) => AuthWebViewSdkClass(
              baseUrl: 
                  "https://nightly-accounts-api.complyment.com/", // 基础 URL
              clientId: "d1d90d96-de43-4ee8-9c0b-d3f17d50ec6b", // 客户端 ID
              responseType: "token", // 响应类型
              scope: "openid%20profile%20user_info_all&", // 权限范围
              redirectUrl: 
                  "https://nightly-accounts.complyment.com/profile/personal-detail", // 重定向 URL
              onTokenReceived: (String token) {
                accessToken = token;
                debugPrint('Received token: $token'); // 打印接收到的令牌
                if (accessToken != null) {
                  Navigator.pushReplacement( // 如果令牌不为空,则导航到成功页面
                      context,
                      MaterialPageRoute(
                          builder: (context) => SuccessScreen()));
                }
              },
            )));
确保您拥有正确的基础 URL、客户端 ID、响应类型、权限范围和重定向 URL

确保您提供的 baseUrlclientIdresponseTypescoperedirectUrl 是正确的。这些参数通常由您的身份验证服务提供商提供。

额外信息

如果您之前设置的 minSdkVersion 小于 19,请确保将其更改为 19 或更高版本:

android {
    defaultConfig {
        minSdkVersion 19
    }
}

此外,在您的应用或包中导入 auth_webview_sdk 包:

import 'package:auth_webview_sdk/auth_webview_sdk.dart';

示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用中集成 auth_webview_sdk 插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late final accessToken;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Auth WebView SDK Example"),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
                context,
                MaterialPageRoute(
                    builder: (context) => AuthWebViewSdkClass(
                          baseUrl: 
                              "https://nightly-accounts-api.complyment.com/", // 基础 URL
                          clientId: "d1d90d96-de43-4ee8-9c0b-d3f17d50ec6b", // 客户端 ID
                          responseType: "token", // 响应类型
                          scope: "openid%20profile%20user_info_all&", // 权限范围
                          redirectUrl: 
                              "https://nightly-accounts.complyment.com/profile/personal-detail", // 重定向 URL
                          onTokenReceived: (String token) {
                            accessToken = token;
                            debugPrint('Received token: $token'); // 打印接收到的令牌
                            if (accessToken != null) {
                              Navigator.pushReplacement( // 如果令牌不为空,则导航到成功页面
                                  context,
                                  MaterialPageRoute(
                                      builder: (context) => SuccessScreen()));
                            }
                          },
                        )));
          },
          child: Text("Login with Auth WebView SDK"),
        ),
      ),
    );
  }
}

class SuccessScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Success"),
      ),
      body: Center(
        child: Text("Login Successful!"),
      ),
    );
  }
}

更多关于Flutter身份验证与Web视图集成插件auth_webview_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter身份验证与Web视图集成插件auth_webview_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


auth_webview_sdk 是一个用于在 Flutter 应用中集成身份验证与 Web 视图的插件。它允许你在应用中嵌入一个 Web 视图,用于处理身份验证流程,通常用于 OAuth 或其他基于 Web 的身份验证流程。

1. 安装插件

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

dependencies:
  flutter:
    sdk: flutter
  auth_webview_sdk: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来安装插件。

2. 使用插件

2.1 导入插件

在你的 Dart 文件中导入插件:

import 'package:auth_webview_sdk/auth_webview_sdk.dart';

2.2 初始化 Web 视图

你可以使用 AuthWebView 组件来嵌入一个 Web 视图,并处理身份验证流程。

class AuthWebViewExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Auth WebView Example'),
      ),
      body: AuthWebView(
        initialUrl: 'https://your-authentication-url.com',
        onPageStarted: (String url) {
          print('Page started loading: $url');
        },
        onPageFinished: (String url) {
          print('Page finished loading: $url');
        },
        onWebViewError: (String error) {
          print('WebView error: $error');
        },
        onAuthSuccess: (String token) {
          print('Authentication successful, token: $token');
          // 你可以在这里处理成功的身份验证,例如保存 token 并导航到主页面
        },
        onAuthFailure: (String error) {
          print('Authentication failed: $error');
          // 你可以在这里处理失败的身份验证,例如显示错误消息
        },
      ),
    );
  }
}

2.3 处理身份验证成功或失败

onAuthSuccessonAuthFailure 回调中,你可以处理身份验证成功或失败的情况。例如,在 onAuthSuccess 中保存 token 并导航到主页面,在 onAuthFailure 中显示错误消息。

3. 配置 Web 视图

你可以根据需要配置 Web 视图的行为,例如启用 JavaScript、设置用户代理等。AuthWebView 组件通常提供了这些配置选项。

AuthWebView(
  initialUrl: 'https://your-authentication-url.com',
  javascriptMode: JavascriptMode.unrestricted,
  userAgent: 'Your Custom User Agent',
  onAuthSuccess: (String token) {
    // 处理成功
  },
  onAuthFailure: (String error) {
    // 处理失败
  },
);

4. 处理重定向

在某些身份验证流程中,身份验证成功后,用户会被重定向到一个特定的 URL,其中包含身份验证 token。你可以通过检查 onPageFinishedonPageStarted 回调中的 URL 来处理重定向。

AuthWebView(
  initialUrl: 'https://your-authentication-url.com',
  onPageFinished: (String url) {
    if (url.contains('token=')) {
      // 提取 token 并处理成功身份验证
    }
  },
);

5. 处理错误

onWebViewErroronAuthFailure 回调中,你可以处理 Web 视图加载错误或身份验证失败的情况。

AuthWebView(
  initialUrl: 'https://your-authentication-url.com',
  onWebViewError: (String error) {
    // 处理 Web 视图错误
  },
  onAuthFailure: (String error) {
    // 处理身份验证失败
  },
);

6. 运行应用

现在你可以运行你的 Flutter 应用,并测试身份验证流程。确保你的身份验证 URL 正确配置,并且能够正确处理重定向和 token 提取。

7. 其他注意事项

  • 安全性: 确保在 Web 视图中处理敏感信息时采取适当的安全措施,例如使用 HTTPS 和验证 URL。
  • 用户代理: 某些身份验证服务可能需要特定的用户代理字符串,你可以通过 userAgent 属性进行设置。
  • 调试: 在开发过程中,你可以使用 printdebugPrint 来输出调试信息,帮助你排查问题。

8. 示例代码

以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Auth WebView Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AuthWebViewExample(),
    );
  }
}

class AuthWebViewExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Auth WebView Example'),
      ),
      body: AuthWebView(
        initialUrl: 'https://your-authentication-url.com',
        javascriptMode: JavascriptMode.unrestricted,
        userAgent: 'Your Custom User Agent',
        onPageStarted: (String url) {
          print('Page started loading: $url');
        },
        onPageFinished: (String url) {
          print('Page finished loading: $url');
          if (url.contains('token=')) {
            // 提取 token 并处理成功身份验证
          }
        },
        onWebViewError: (String error) {
          print('WebView error: $error');
        },
        onAuthSuccess: (String token) {
          print('Authentication successful, token: $token');
          // 处理成功身份验证
        },
        onAuthFailure: (String error) {
          print('Authentication failed: $error');
          // 处理失败身份验证
        },
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!