【问题标题】:How to get device user agent information in Flutter如何在 Flutter 中获取设备用户代理信息
【发布时间】:2018-10-29 05:08:52
【问题描述】:

我正在构建一个颤振应用程序,它需要将用户代理信息与 http 请求一起发送。我正在使用http dart package 发送请求。如何在 Flutter 中获取用户代理字符串并将其与 http 包一起使用?

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    我是通过在 Flutter 中调用原生方法来实现的。首先你必须在 android Main Activity 中添加方法通道

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        GeneratedPluginRegistrant.registerWith(this);
    
        new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
                new MethodChannel.MethodCallHandler() {
                    @Override
                    public void onMethodCall(MethodCall call, MethodChannel.Result result) {
                        if (call.method.equals("getUserAgent")) {
                            result.success(System.getProperty("http.agent"));
                        } else {
                            result.notImplemented();
                        }
                    }
                });
    }
    

    然后getUserAgent()方法可以像下面这样在flutter中调用

    Future<String> _getUserAgent() async {
      try {
        return await platform.invokeMethod('getUserAgent');
      } catch (e) {
        return 'Unknown';
      }
    }
    

    【讨论】:

    • 当我在我的 mainActivity.kt 文件中添加上面的代码时,它给出了几个错误:(20, 15): Expecting member declaration
    【解决方案2】:

    您可以使用flutter_user_agent 库以跨平台方式获取它:https://pub.dev/packages/flutter_user_agent

    import 'package:flutter_user_agent/flutter_user_agent.dart';
    
    ...
    
        String ua = await FlutterUserAgent.getPropertyAsync('userAgent');
    
    

    【讨论】:

      【解决方案3】:

      这对我有用 flutter_user_agent 库:https://pub.dev/packages/flutter_user_agent 如上所述

      String _userAgent = await FlutterUserAgent.getPropertyAsync('userAgent');
      
          final _response = await http.get(_url, headers: {
            'Content-Type': 'application/json',
            'Accept-Charset': 'utf-8',
            'User-Agent': '${_userAgent.toLowerCase()}',
          });
      

      【讨论】:

        【解决方案4】:

        找到了一个库。看看这个库做了什么会很有趣,我认为不需要为此实现一个库。

        https://pub.dartlang.org/packages/user_agent

        关于如何使用它的示例:

        main() async {
            app.get('/', (req, res) async {
                var ua = new UserAgent(req.headers.value('user-agent'));
        
                if (ua.isChrome) {
                    res.redirect('/upgrade-your-browser');
                    return;
                } else {
                    // ...
                }
            });
        }
        

        或者,如果您想向 http 客户端添加用户代理,您可以这样做:

        Future<http.Response> fetchPost() {
          return http.get(your_url,
            // Send user-agent header to your backend
            headers: {HttpHeaders.userAgentHeader: "your_user_agent"},
          );
        }
        

        您可以查看 HttpHeaders 以查看预定义标题的完整列表,虽然 headers 有一个映射,但您可以根据需要创建自己的标题。

        【讨论】:

        • 我问在flutter中如何创建用户代理字符串。我想将它发送到服务器。比如,String userAgent = System.getProperty("http.agent"); 可以用来获取android中的用户代理。
        • @JavierMendonca 我相信您误解了 udara 的问题。我也在寻找使用 Flutter 获取设备用户代理的解决方案。
        • @nemoryoliver 我想我的回答会对你有所帮助:)
        • 你在第一个代码示例中使用了http包吗? app变量,是不是代表http库?
        • 你的答案是完全不同的方向。他要求获取 android 设备的用户代理,因此 http 请求根据用户设备具有正确的用户代理,而不是所有设备都相同。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-01
        • 1970-01-01
        • 2018-05-12
        • 2023-03-30
        • 1970-01-01
        相关资源
        最近更新 更多