Détection du système D'exploitation iOS / Android

j'ai fait quelques recherches, et cette question a été soulevée, mais pas de la façon dont j'ai l'intention. Je construis une page pour un client qui est un QR Code landing, qui est un endroit pour télécharger une application. Donc, il n'a pas à imprimer 2 codes QR sur une page, je voudrais détecter le système d'exploitation actuel (Apple/Android/Autres[non pris en charge]) et modifier mes éléments en fonction de cette valeur.

j'ai regardé le script "detectmobilebrowsers" et c'est seulement destiné à dire si oui ou non l'utilisateur est mobile à tous, alors que je voudrais comprendre ce système d'exploitation, l'utilisateur est en cours d'exécution et vous proposer la meilleure version de l'application.

autres réponses que j'ai trouvé similaires à cette question semblait soit périmé ou peu fiable (n'a pas de détection pour les navigateurs tablette Android), donc je suis à la recherche de quelque chose de nouveau. Comment puis-je y parvenir? (De préférence en utilisant jQuery-Javascript-PHP dans cet ordre).

113
demandé sur Alexander Lozada 2014-02-13 03:05:28

7 réponses

vous pouvez tester la chaîne user agent:

/**
 * 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";
}
248
répondu feeela 2016-07-26 08:43:43

Solution 1: L'Utilisateur De L'Agent Sniffing

pour Android et iPhone:

if( /Android|webOS|iPhone|iPad|iPod|Opera Mini/i.test(navigator.userAgent) ) {
 // run your code here
}

si vous souhaitez détecter tous les appareils mobiles, y compris blackberry et Windows phone, vous pouvez utiliser cette version complète:

var deviceIsMobile = false; //At the beginning we set this flag as false. If we can detect the device is a mobile device in the next line, then we set it as true.


if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|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.test(navigator.userAgent) 
    || /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.test(navigator.userAgent.substr(0,4))) {
   deviceIsMobile = true;
}

if(deviceIsMobile){
    // run your code here
}

Cons : les chaînes D'agents utilisateurs changent et sont mises à jour au fur et à mesure que de nouveaux téléphones et de nouvelles marques apparaissent. Donc vous devez garder cette liste à jour si vous voulez soutenir tous les appareils mobiles.

Solution 2: mobile détecter bibliothèque JS

vous pouvez utiliser le mobile detect bibliothèque JS pour ce faire.

Cons : ces fonctionnalités de détection D'appareils basées sur JavaScript ne peuvent fonctionner que pour la dernière génération de smartphones, tels que les appareils iPhone, Android et Palm WebOS. Ces fonctionnalités de détection de périphériques peuvent ne pas fonctionner pour les smartphones plus anciens qui ont un faible support pour JavaScript, y compris les appareils mobiles BlackBerry, PalmOS et Windows.

7
répondu Iman Sedighi 2016-07-25 03:37:14

ce problème a déjà été résolu ici: Quelle est la meilleure façon de détecter un appareil mobile à jQuery? .

sur la réponse acceptée, ils testent essentiellement si c'est un iPhone, un iPod, un appareil Android ou quoi que ce soit pour revenir vrai. Il suffit de garder ceux que vous voulez par exemple if( /Android/i.test(navigator.userAgent) ) { // some code.. } retournera vrai seulement pour Android user-agents.

cependant, les user-agents ne sont pas vraiment fiables puisqu'ils peuvent être changés. Best il reste à développer quelque chose d'universel pour toutes les plateformes mobiles.

4
répondu gretro 2017-05-23 12:18:01

on peut utiliser navigateur.la plate-forme pour obtenir le système d'exploitation sur lequel le navigateur est installé.

function getPlatform(){
 var platform=["Win32","Android","iOS"];
 for(var i=0;i<platform.length;i++){
   if(navigator.platform.indexOf(platform[i])>-1){
      return platform[i];
   }
 }
}
getPlatform();
3
répondu AKASH KHATRI 2015-10-25 13:22:02

vous pouvez également créer liens dynamiques Firbase qui fonctionnera selon votre exigence. Il prend en charge de multiples plates-formes. Ce lien peut être créé manuellement, ainsi que par la programmation. Vous pouvez alors intégrer ce lien dans le code QR.

si l'application cible est installée, le lien redirigera l'utilisateur vers l'application. Si elle n'est pas installée, elle redirigera vers Play Store / App store / tout autre site web configuré.

1
répondu Sagar 2018-04-05 03:54:07

vous pouvez également y parvenir avec user agent sur php:

$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);

if(stripos($userAgent,'android') !== false) { // && stripos($userAgent,'mobile') !== false) {
  header('Location: http://oursite.com/download/yourApp.apk');

exit();

}

1
répondu Hamed Yarandi 2018-07-28 09:40:44

en utilisant le cordova-device-plugin, vous pouvez détecter

device.platform

sera "Android" pour android, et "windows" pour windows. Travaux sur l'appareil, et lors de la simulation sur navigateur. Voici un toast qui affichera les valeurs de l'appareil:

    window.plugins.toast.showLongTop(
    'Cordova:     ' + device.cordova + '\n' +
    'Model:       ' + device.model + '\n' +
    'Platform:    ' + device.platform + '\n' +
    'UUID:        ' + '\n' +
                      device.uuid + '\n' +
    'Version:     ' + device.version + '\n' +
    'Manufacturer ' + device.manufacturer + '\n' +
    'isVirtual    ' + device.isVirtual + '\n' +
    'Serial       ' + device.serial);
0
répondu pollaris 2017-10-06 15:06:34