Extension:MobileFrontend/Configurer la détection automatique du navigateur

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page Extension:MobileFrontend/Configuring browser auto-detection and the translation is 97% complete.
Outdated translations are marked like this.
Other languages:
English • ‎Türkçe • ‎français • ‎русский • ‎中文 • ‎日本語

Ce document explique comment les administrateurs de sites peuvent activer un site pour mobiles pour leur extension Mediawiki, de sorte à ce que les utilisateurs qui utilisent des appareils mobiles pour se connecter au site soient directement redirigés sur l'affichage pour mobiles plutôt que sur l'affichage pour bureau.

Autodetection embarquée

Depuis la validation 5a1867e, MobileFrontend prend en charge la détection automatique des appareils pour une configuration minime.

Tout ce que vous avez à faire est d'initialiser

$wgMFAutodetectMobileView = true;

dans votre fichier LocalSettings.php.

Bien que ce soit la manière la plus facile, ce ne sera certes pas la plus performante. Cette solution N'EST PAS compatible avec la mise en cache côté client, car elle n'apporte pas de solution pour que votre cache puisse savoir la différence entre l'affichage pour mobile et l'affichage pour bureau.

Filtre AMF pour mobiles (Apache Mobile Filter)

Avec la validation 0fb2c72d, MobileFrontend sprend en charge le filtrage Apache des mobile (AMF) pour la détection des appareils. Vous devez utiliser un serveur web Apache. Suivez les instructions pour installer/configurer AMF, et cela devrait suffire. Cette fonction est très similaire à la détection automatique déjà implémentée, et ne sera pas compatible avec la mise en cache côté client sans une configuration spéciale.

Détection des appareils serveur web et cache de serveur mandataire

Certains serveurs mandataires inversés (tels que Varnish ) peuvent informer MediaWiki s'il doit utiliser la version mobile ou pas, en créant ainsi une détection automatique conviviale par un cache.

Détection utilisant Varnish: site mobile sur un autre domaine

Supposez que nous utilisions Varnish, et que nous voulons que wiki.example.com s'affiche en version bureau, et que m.wiki.example.com soit en version mobile. Voici comment faire cela.

sub vcl_recv {
	remove req.http.x-wap; # Le demandeur ne doit pas être autorisé à soumettre d'entête X-WAP arbitraire
	if (req.http.host == "m.wiki.example.com") { # domaine mobile
		set req.http.host = "wiki.example.com"; # domaine bureau
		set req.http.x-wap = "no";
	}
}
sub vcl_hash {
	# Mettre en cache séparément la version pour mobile.
	#
	# {{note|1=L'entête x-wap (lorsqu'elle est présente) ne doit avoir qu'une valeur seulement, c'est pourquoi vcl_recv() doit supprimer l'entête X-WAP fournie par l'utilisateur.}}
	hash_data(req.http.x-wap);
}

LocalSettings.php doit contenir ceci :

$wgMobileUrlTemplate = 'm.wiki.example.com'; // domaine du site pour mobiles

Si vous avez de nombreux wikis, il est plus pratique d'utiliser une syntaxe telle que :

$wgMobileUrlTemplate = '%h0.m.%h1.%h2';

%h<#> correspond à un segment de l'hôte (le hostname) de $wgServer. Donc si $wgServer = 'en.wikipedia.org';, %h0 vaut en, %h1 vaut wikipedia, %h2 vaut org. Partant de cela, le $wgMobileUrlTemplate ci-dessus va automatiquement transformer votre URL mobile en en.m.wikipedia.org. Ceci est particulièrement utile pour la WMF et les projets tels que Wikipedia, qui suivent le modèle <lang code>.wikipedia.org, donc le domaine mobile ressemblera toujours à <lang code>.m.wikipedia.org.

Dans cette solution, la détection automatique interne doit être désactivée ($wgMFAutodetectMobileView = false;), afin que MediaWiki ne remette pas en cause les décisions de Varnish.

Détection utilisant Varnish: un même domaine pour les sites bureau et mobile

Supposez que nous utilisions, et nous voulons que wiki.example.com affiche la version bureau et mobile avec la même URL (sans créer de domaines supplémentaires tels que m.wiki.example.com, etc.). Voici comment faire :

sub vcl_recv {
	remove req.http.x-wap; # Le demandeur ne doit pas être autorisé à fournir d'entête arbitraire X-WAP
	if(req.http.User-Agent ~ "(?i)^(lg-|sie-|nec-|lge-|sgh-|pg-)|(mobi|240x240|240x320|320x320|alcatel|android|audiovox|bada|benq|blackberry|cdm-|compal-|docomo|ericsson|hiptop|htc[-_]|huawei|ipod|kddi-|kindle|meego|midp|mitsu|mmp\/|mot-|motor|ngm_|nintendo|opera.m|palm|panasonic|philips|phone|playstation|portalmmm|sagem-|samsung|sanyo|sec-|sendo|sharp|softbank|symbian|teleca|up.browser|webos)") {
		set req.http.x-wap = "no";
	}

	if(req.http.Cookie ~ "mf_useformat=") {
		# Cela signifie que l'utilisateur a cliqué sur le lien ''Version mobile'' en bas de la page, permettant de basculer l'affichage.
		# Informer vcl_hash() que ceci doit être mis en cache en tant que page mobile.
		set req.http.x-wap = "no";
	}
}
sub vcl_hash {
	# Mettre en cache la version mobile séparément.
	#
	# {{note|1=L'entête x-wap (lorsqu'elle est présente) ne doit avoir qu'une valeur seulement, c'est pourquoi $recv doit supprimer l'entête $wap fournie par l'utilisateur.}}
	hash_data(req.http.x-wap);
}
Dans cette solution, la detection automatique existante doit être activée (elle n'impactera pas le cache) :
$wgMFAutodetectMobileView = true;

Sinon MobileFrontend se comporte mal (si nous n'initialisons pas $wgMobileUrlTemplate, il ignore l'entête X-WAP , et si nous le faisons, il ne positionne pas les cookies "useformat" pour le lien permettant de basculer vers la Version mobile, en bas de la page).