android Flutter -拦截通过WebView小部件的HTTP请求

3htmauhk  于 2022-12-21  发布在  Android
关注(0)|答案(1)|浏览(305)

我正在尝试制作一个Android应用程序,在其中我需要访问这个website。但是,登录它会给你一个临时访问令牌,你可以用它来做各种操作。
如果访问令牌仍未过期,则需要在每次访问网站时获取该令牌,否则系统将在要求您再次输入登录详细信息时创建一个新令牌。
下面是我需要从Chrome的开发工具中获取的请求:

我正在使用WebView小部件让用户登录到我的应用程序中他的帐户。
我的问题是:我怎样才能找到所有的请求,这样我就可以过滤到一个持有访问令牌的请求中并获取它呢?2有没有其他的方法来检索这个访问令牌呢?
我没有包含任何代码,因为到目前为止,我所做的是WebView小部件的简单实现,但如果需要,我可以这样做。

hjqgdpho

hjqgdpho1#

您没有指明您的WebView widget使用的是哪个特定的软件包。
因此,假设您使用的是webview_flutter,它是Flutter中提供Web视图的最流行的包:
您可以使用WebViewController示例来指定自己的回调,这些回调将侦听WebViewWidget导航事件。
例如:

class WebAuthWidget extends StatefulWidget {
  final Function(String token) onAccessTokenUpdate;

  const WebAuthWidget({Key? key, required this.onAccessTokenUpdate}) : super(key: key);

  @override
  State<WebAuthWidget> createState() => _WebAuthWidgetState();
}

class _WebAuthWidgetState extends State<WebAuthWidget> {
  late WebViewController controller;

  @override
  void initState() {
    super.initState();
    controller = WebViewController()
      ..setNavigationDelegate(
        NavigationDelegate(
          onNavigationRequest: (NavigationRequest request) {
            final uri = Uri.tryParse(request.url);
            if (uri != null && uri.queryParameters.containsKey('access_token')) {
              // Get the access token from the requested URL
              final accessToken = uri.queryParameters['access_token'];
              if (accessToken is String) widget.onAccessTokenUpdate(accessToken);
            }

            // Always navigate to the requested URL
            return NavigationDecision.navigate;
          },
        ),
      );
  }

  @override
  Widget build(BuildContext context) => WebViewWidget(controller: controller);
}

相关问题