detectPlatform static method
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';
}