我一直在尝试找到一种针对华为移动设备的方法,以便将它们重定向到华为应用商店,但似乎找不到解决方案。 我目前想到的一个解决方案是编写正则表达式来检查从 navigator.userAgent 对象返回的字符串中是否包含 HUAWEI | Huawei | huawei ,但我不确定它是否适用于所有这些设备,即使这就是我查看这些 示例userAgents 后得出的结论。
是否有模拟器或类似 browserstack 的工具可以尝试此操作?
我一直在尝试找到一种针对华为移动设备的方法,以便将它们重定向到华为应用商店,但似乎找不到解决方案。 我目前想到的一个解决方案是编写正则表达式来检查从 navigator.userAgent 对象返回的字符串中是否包含 HUAWEI | Huawei | huawei ,但我不确定它是否适用于所有这些设备,即使这就是我查看这些 示例userAgents 后得出的结论。
是否有模拟器或类似 browserstack 的工具可以尝试此操作?
我不知道如何针对特定类型的手机进行定位,但是你可以测试用户代理字符串:
/**
* Determine the mobile operating system.
* This function returns one of 'iOS', 'Android', 'Windows Phone', or 'unknown'.
*
* @returns {String}
*/
function getMobileOperatingSystem() {
var userAgent = navigator.userAgent || navigator.vendor || window.opera;
// Windows Phone must come first because its UA also contains "Android"
if (/windows phone/i.test(userAgent)) {
return "Windows Phone";
}
if (/android/i.test(userAgent)) {
return "Android";
}
// iOS detection from: https://dev59.com/EGox5IYBdhLWcg3wr2To#9039885
if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
return "iOS";
}
return "unknown";
}
这个解决方案在我的nginx服务器上运行良好。我创建了一个PC下载页面/download/。在链接/downloads/中,服务器会将用户重定向。
location /downloads/ {
if ($http_user_agent ~* '(iPhone|iPod|blackberry)') {
return 301 https://apps.apple.com/us/app/man-errors/id1581826209;
}
if ($http_user_agent ~* '(huawei)') {
return 301 https://appgallery.huawei.com/app/C105589651;
}
if ($http_user_agent ~* '(android)') {
return 301 https://play.google.com/store/apps/details?id=com.manerrors.truck;
}
return 301 /download/;
}
最简单和最短的检查方法:(不包括平板电脑)
navigator.userAgent.match(/"ALP-"|"AMN-"|"ANA-"|"ANE-"|"ANG-"|"AQM-"|"ARS-"|"ART-"|"ATU-"|"BAC-"|"BLA-"|"BRQ-"|"CAG-"|"CAM-"|"CAN-"|"CAZ-"|"CDL-"|"CDY-"|"CLT-"|"CRO-"|"CUN-"|"DIG-"|"DRA-"|"DUA-"|"DUB-"|"DVC-"|"ELE-"|"ELS-"|"EML-"|"EVA-"|"EVR-"|"FIG-"|"FLA-"|"FRL-"|"GLK-"|"HMA-"|"HW-"|"HWI-"|"INE-"|"JAT-"|"JEF-"|"JER-"|"JKM-"|"JNY-"|"JSC-"|"LDN-"|"LIO-"|"LON-"|"LUA-"|"LYA-"|"LYO-"|"MAR-"|"MED-"|"MHA-"|"MLA-"|"MRD-"|"MYA-"|"NCE-"|"NEO-"|"NOH-"|"NOP-"|"OCE-"|"PAR-"|"PIC-"|"POT-"|"PPA-"|"PRA-"|"RNE-"|"SEA-"|"SLA-"|"SNE-"|"SPN-"|"STK-"|"TAH-"|"TAS-"|"TET-"|"TRT-"|"VCE-"|"VIE-"|"VKY-"|"VNS-"|"VOG-"|"VTR-"|"WAS-"|"WKG-"|"WLZ-"|"YAL"/i)
此方法使用前缀和破折号作为指纹,从提供在this github repo.的设备ID列表中检测华为设备。
例如:华为P Smart 2019设备ID:"POT-LX1AF","POT-LX2J","POT-LX1RUA","POT-LX3"
列表,但使用POT-
进行检测。
注意:我们假设这个前缀是华为唯一的。如果具有相同前缀的不同品牌的设备发送设备ID,也将被视为华为。
关于“HUAWEI”字符串检查方法的说明,检查此字符串并不能保证设备是华为。
如果访问者使用第三方浏览器,如Chrome,则发送的用户代理不包含此字符串。当访问者来自应用内浏览器视图时,例如Twitter或Instagram(当您单击这些应用程序中的链接时,网站会在Web视图中打开)。它还随着一些应用程序的访问而发送,例如Petal Search应用程序(华为的官方搜索引擎应用程序)。