9

I have used below code to detect mobile in magento1.

$isMobile = Zend_Http_UserAgent_Mobile::match(
    Mage::helper('core/http')->getHttpUserAgent(),
    $_SERVER
);

I am not sure if there is something available for Magento2 as well. Anyone have used something like this in magento2?

  • To detect the client devices, we have an extension here github.com/EaDesgin/magento2-mobiledetect – Krishna ijjada Sep 21 '17 at 6:48
  • Let me know if you have any issue? – Vishwas Soni Sep 22 '17 at 13:41
  • You should approve answer or ask your queries to help other developers to find right solutions. – Vishwas Soni Sep 25 '17 at 6:54
  • @VishwasSoni I've tried you solution its give me blank page. without any error. That's why i've not accepted yet. – Kul Sep 25 '17 at 7:42
  • @Kul Debug the issue and came back with the errors you get. A community will help you. – Vishwas Soni Sep 25 '17 at 8:55
6

Best way is to detect a mobile device is

//Identifying if user is on mobile browser or not
if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$_SERVER['HTTP_USER_AGENT'])||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($_SERVER['HTTP_USER_AGENT'],0,4))) {
    $browserStatus = 'Mobile';
}

I have used this in many websites and working perfect.

  • Worked for me as well! – Kul Oct 4 '17 at 10:02
7

You can use same class in Magento2.

protected $httpHeader;

protected $mobileAgent;

public function __construct(
   ...
    \Magento\Framework\HTTP\Header $httpHeader,
    \Zend_Http_UserAgent_Mobile $mobileAgent
   ...
) {
    $this->httpHeader = $httpHeader;
    $this->mobileAgent = $mobileAgent
}

public function isMobile(){
  $userAgent = $this->httpHeader->getHttpUserAgent();

  return $this->mobileAgent->match($userAgent, $_SERVER); //the code which you want.
}
  • Getting Exception #0 (Exception): Notice: Undefined index: http_user_agent in /var/www/Magento2/vendor/magento/zendframework1/library/Zend/Http/UserAgent/Features/Adapter/Browscap.php on line 69 exception.... please help me – B.K May 14 '18 at 6:59
  • 1
    @kranthi you might have to build your plugin after DI injection php bin\magento setup:di:compile – Sumit Kumar May 29 '18 at 10:05
  • @SumitKumar ran command but no use – B.K May 29 '18 at 14:34
  • It seems your browser is not set http_user_agent. Try to use if condition like this : stackoverflow.com/questions/14130830/… – Vishwas Soni May 29 '18 at 18:11
2

You can use below code

   protected $httpHeader;

   public function __construct(
    \Magento\Framework\Model\Context $context,
    \Magento\Framework\HTTP\Header $httpHeader,
    )
    {
         $this->httpHeader = $httpHeader;
         parent::__construct($context);
    }
    public function execute(){
      $userAgent = $this->httpHeader->getHttpUserAgent();
    }
2

You use this Library for Mobile Detect

Link

create custom module add library in module and create helper and put this function to global use.

  public function isMobile() 
  {
     return $this->mobileDetector->isMobile() || $this->mobileDetector->isTablet();
  } 

Add mobileDetector in your constructor to inject library.

0

You need to inject only one class "\Magento\Framework\HTTP\Header", because "\Zend_Http_UserAgent_Mobile::match" is a static method, so this will work:

/**
 * @var \Magento\Framework\HTTP\Header
 */
protected $httpHeader;

/**
 * @param \Magento\Framework\HTTP\Header $httpHeader
 */
public function __construct(
    \Magento\Framework\HTTP\Header $httpHeader
) {
    $this->httpHeader = $httpHeader;
}

/**
 * @return bool
 */
public function isMobile()
{
    $userAgent = $this->httpHeader->getHttpUserAgent();
    return \Zend_Http_UserAgent_Mobile::match($userAgent, $_SERVER);
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.