【问题标题】:How to target Huawei specific user-agents如何针对华为特定的用户代理
【发布时间】:2021-02-04 15:36:19
【问题描述】:

我一直在尝试找到一种方法来定位华为移动设备,以便将它们重定向到华为应用商店,但似乎找不到解决方案。到目前为止我想到的一个是写一个正则表达式来检查 HUAWEI |华为 |从 navigator.userAgent 对象返回的字符串中的 huawei .. 但我不确定它是否适用于所有此类设备,尽管我认为这是查看这些 sample userAgents

是否有模拟器或类似 browserstack 之类的东西可以尝试一下?

【问题讨论】:

    标签: javascript mobile user-agent huawei-mobile-services huawei-browser


    【解决方案1】:

    您可以查询useragent判断当前设备是否为华为手机。

    目前华为浏览器提供基于HMS或GMS设备类型的UA。 以下为示例(浏览器版本号、HMS版本号、GMS版本号、设备信息会相应变化):

    1. HMS 和 GMS 均已安装。下面是一个例子:

    Mozilla/5.0 (Linux; Android 6.0.1; LYA-AL00;HMSCore/4.0.0 GMS/10.4 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.64 HuaweiBrowser/10.0.3.102 Mobile Safari/537.36

    1. 如果只安装HMS,以下为示例:

    Mozilla/5.0 (Linux; Android 6.0.1; LYA-AL00;HMSCore/4.0.0 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.64 HuaweiBrowser/10.0.3.102 Mobile Safari/537.36

    1. 仅安装了 GMS。下面是一个例子:

    Mozilla/5.0 (Linux; Android 6.0.1; LYA-AL00;GMS/10.4 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.64 HuaweiBrowser/10.0.3.102 Mobile Safari/537.36

    1. 没有 HMS 或 GMS。下面是一个例子:

    Mozilla/5.0 (Linux; Android 6.0.1; LYA-AL00 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.64 HuaweiBrowser/10.0.3.102 Mobile Safari/537.36

    【讨论】:

    • 这看起来不错,但为了确保我们得到的是华为设备,我认为应该检查 userAgent 的设备型号,在上述情况下将是“LYA-AL00”.. 所以应该成为那个或什么的polyfill?
    • hi@Кольо Пеев,可以从ro.product.brand获取品牌信息,华为手机一般为HUAWEI或HONOR。
    • @Кольо Пеев,如果是关于检查应用商店兼容性,这是一个非常好的答案,因为如果您可以确保手机具有 HMSCore 而不是 GMS,那么您应该重定向到 App Gallery 而不是 Google Play
    【解决方案2】:

    我不知道针对特定类型的手机,但你可以测试用户代理字符串:

    /**
     * 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: http://stackoverflow.com/a/9039885/177710
        if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
            return "iOS";
        }
    
        return "unknown";
    }
    

    【讨论】:

      【解决方案3】:

      最简单最短的检查方法:(不包括平板电脑)

      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 应用程序(华为官方搜索引擎应用程序)等一些应用程序的访问发送

      【讨论】:

        【解决方案4】:

        此解决方案适用于我的 nginx 服务器。我为PC制作了页面/下载/。在链接 /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/;
          }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-31
          • 2019-08-06
          • 1970-01-01
          • 1970-01-01
          • 2015-07-31
          • 1970-01-01
          • 1970-01-01
          • 2019-01-29
          相关资源
          最近更新 更多