首页 > 解决方案 > 在flutter中获取URL响应的控制台登录Webview

问题描述

我使用webview_flutter插件来显示 Webview。目前,我在 Webview 中打开条带 API。条带化 API 成功后,它将重定向到我的服务器 API。在此 API 中,验证条带卡并发送在控制台中打印的响应。我没有在颤动方面得到这个控制台日志。

                       WebView(
                            initialUrl: "https://connect.stripe.com/oauth/authorize?response_type=code&client_id=${clientId}&scope=read_write&redirect_uri=${baseUrl}/transaction/connect&state=161",
                            javascriptMode: JavascriptMode.unrestricted,
                            javascriptChannels:  [
                              JavascriptChannel(
                                  name: 'Print',
                                  onMessageReceived: (JavascriptMessage message) {
                                    print('Message: ${message.message}');
                                  }),
                            ].toSet(),
                            onPageStarted: (url) {
                              debugPrint("onPageStarted $url");
                            },
                            onPageFinished: (url) {
                              debugPrint("onPageFinished $url");
                            })

我试图从 JavascriptChannel 中的 API 获取 Javascript 响应,这进入了 android,但没有进入 iOS 端。

1)有没有办法让这些日志在颤振方面得到?

2)是否有任何替代方法可以通过 API 获得响应以在颤振中进行审查?

标签: flutterwebview

解决方案


我找到了一种从 Stripe API 回调的替代方法。为了响应 API 回调,我已经重定向到另一个后端 API。

 public connectWithStripe = async (req: CustomRequest, res: Response) => {
    request.post(process.env.StripeConnecturl
        , {
            form: {
                client_secret: process.env.StripeKey,
                code: req.query.code,
                grant_type: "authorization_code",
            },
        }, async (error: any, response: any) => {
            if (response && response.statusCode === 200) {
                const stripeDetails = {
                    stripeAccountId: JSON.parse(response.body).stripe_user_id,
                };
                return res.redirect('connect-success');  // redirect when successfully stripe account 
            } else {
                return res.redirect('connect-fail');   // fail
            }
        });
}

在颤振方面,我们在 navigationDelegate 函数中获得了 URL 变化。

WebView(
    initialUrl: url,
    navigationDelegate: (request) {
      if (request.url.contains('connect-success')) {
        // TODO when api success
      } else if (request.url.contains('connect-fail')) {
        // TODO when api fail
      }
      return NavigationDecision.navigate;
    },
)

推荐阅读