Bric à Brac - Comment différencier un Ipad d'un Mac avec le User Agent depuis la version 13 d'IOS ?

Bric à Brac

[28/04/2020] Comment différencier un Ipad d'un Mac avec le User Agent depuis la version 13 d'IOS ?

Difference between iPad and mac on iPad with User Agent since version 13 of IOS

Comment différencier un Ipad d'un Mac avec le User Agent depuis la version 13 d'IOS ?

Depuis l'IOS 13, Apple a tout bonnement décidé de cacher au serveur web quel type de matériel ils utilisent. Les Ipads sont donc considérés comme des Macintosh dans le User Agent (UA).

Par exemple, avant la version 12 d'IOS, vous aviez ce User Agent en PHP ou en javascript;
Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10
Aujourd'hui, il s'est transformé en ceci par exemple :
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15
Le iPad s'est transformé en Macintosh (!).

Difficile pour nous les développeurs d'orienter nos développements suivant les matériels utilisés.
Nous pouvons tout de même trouver une parade à ce qu'Apple veut nous cacher.

Un grand débat a eu lieu sur le forum des développeurs APPLE qui indique clairement qu'il n'y a pas de solution et qu'APPLE botte en touche :
https://forums.developer.apple.com/thread/119186

Voici une fonction javascript qui va vous permettre de détecter si un matériel est mobile et si c'est un Ipad, Ipod, Iphone.
Pour cela, nous allons tester le User Agent avec :

1) la manière classique, détection des mots iPhone, iPad, iPod, webOS dans le User Agent
2) si la détection 1 ne donne pas de résultat, nous allons tester le navigateur pour savoir s'il utilise la fontion maxTouchPoints.

Cette fonction maxTouchPoints va permettre de nous renvoyer le nombre maximal de points de contact tactiles simultanés pris en charge par l'appareil utilisé.
Nous allons seulement interroger cette fonction pour savoir s'il y a plus de 2 points de contact tactiles simultanés sur l'appareil utilisé.
Plus d'informations à propos de cette fonction ici : Navigator.maxTouchPoints.

La fonction javascript;
 
function detectMobileIOS() {
	var isMobileIOS = false;
	let isMobileMac = RegExp(/webOS|iPhone|iPod|iPad/i).test(navigator.userAgent);
	// Check iPhone, iPad, iPod with classic method
	if (isMobileMac) {
		// Check if is IPAD or IPHONE
		isMobileIOS = true;
	} else {
		// Check if APPLE lies on device
		const isMac = RegExp(/Macintosh/i).test(navigator.userAgent);
		
		// Is mac?
		if (isMac) {
			// Is Touch device like iphone / ipad?
			if (navigator.maxTouchPoints && navigator.maxTouchPoints > 2) {
				isMobileIOS = true;
			} 
		} else {
			isMobileIOS = false;
		}
	}
	return isMobileIOS;
}


Bon code ;-)
 

© 2005 - 2020 • INFORMATUX