如何在Flutter中获取设备用户代理信息

时间:2018-10-29 05:08:53

标签: dart flutter

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

4 个答案:

答案 0 :(得分: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()方法可以像下面这样颤动地调用

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

答案 1 :(得分:0)

您可以使用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');

答案 2 :(得分:0)

通过使用 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()}',
    });

答案 3 :(得分:-1)

找到了一个做到这一点的图书馆。查看该库的功能会很有趣,我认为不需要为此实现一个库。

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可以绘制地图,但是您可以根据需要创建自己的标头。