detectPlatform static method

String detectPlatform(
  1. Request req
)

Detects the platform (using "user-agent") from which the given HTTP request was made.

  • req an HTTP RequestContext request to process. Returns the detected platform and version. Detectable platforms: "mobile", "iphone", "ipad", "macosx", "android", "webos", "mac", "windows". Otherwise - "unknown" will be returned.

Implementation

static String detectPlatform(Request req) {
  var ua = req.headersAll['user-agent']?[0] ?? '';
  var version;

  if (RegExp(r'mobile').hasMatch(ua)) {
    return 'mobile';
  }
  if (RegExp(r'like Mac OS X').hasMatch(ua)) {
    version = RegExp(r'CPU( iPhone)? OS ([0-9\._]+) like Mac OS X')
        .firstMatch(ua)
        ?.group(1)
        ?.replaceAll('_', '.'); //exec(ua)[2].replace(/_/g, '.');
    if (RegExp(r'iPhone').hasMatch(ua)) {
      return 'iphone ' + version;
    }
    if (RegExp(r'iPad').hasMatch(ua)) {
      return 'ipad ' + version;
    }
    return 'macosx ' + version;
  }
  if (RegExp(r'Android').hasMatch(ua)) {
    version = RegExp(r'Android ([0-9\.]+)[\);]')
        .firstMatch(ua)
        ?.group(0); // exec(ua)[1];
    return 'android ' + version;
  }
  if (RegExp(r'webOS/').hasMatch(ua)) {
    version = RegExp(r'webOS\/([0-9\.]+)[\);]')
        .firstMatch(ua)
        ?.group(0); // exec(ua)[1];
    return 'webos ' + version;
  }
  if (RegExp(r'(Intel|PPC) Mac OS X').hasMatch(ua)) {
    version = RegExp(r'(Intel|PPC) Mac OS X ?([0-9\._]*)[\)\;]')
        .firstMatch(ua)
        ?.group(1)
        ?.replaceAll('_', '.'); //exec(ua)[2].replace(/_/g, '.');
    return 'mac ' + version;
  }

  if (RegExp(r'Windows NT').hasMatch(ua)) {
    try {
      version = RegExp(r'Windows NT ([0-9\._]+)[\);]')
          .firstMatch(ua)
          ?.group(0); //exec(ua)[1];
      return 'windows ' + version;
    } catch (ex) {
      return 'unknown';
    }
  }
  return 'unknown';
}