par , 28/02/2015 à 20h41 (1185 Affichages)
Bonjour tout le monde.
La détection des appareils mobiles se situe principalement autour des en-têtes HTTP comme l'user-agent. De nos jours, adaptez une application web selon la nature du client devient de plus en plus important.
Si vous vous souciez de la différenciation sur vos serveurs du traffic entre clients de type "desktop" et clients de type "mobile", je vais tenter de vous parler des principales solutions du marché que je connais, à savoir :
1/ 51 Degrees
Plusieurs versions pour différents langages de programmations et packaging sont proposés ici. Deux principaux types d'API sont proposés, "trie" et "pattern", le premier étant le plus rapide, le second privilégiant la précision dans la détection. A choisir selon son usage détection en temps réel ou utilisation locale en mode "batch". Pour avoir testé la version pour le langage C, multiplateforme (testé sous différents unixes mais doit marcher aussi bien sous win32), la version "trie" est en effet l'une des plus rapides du marché au prix d'une consommation mémoire plutôt conséquente. La version "pattern" est bien plus économe en terme de consommation mémoire bien que la différence dans la précision se fait bien sentir.
Les différents appels de l'API sont assez simples d'accès :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Example de l'API C version "trie"
#include <51Degrees.h>
...
DataSetInitStatus status;
int device;
int ismobilepropindex;
char *ismobilevalue;
...
if ((status = init("/tmp/51Degrees-Lite.trie", NULL) == DATA_SET_INIT_STATUS_SUCCESS) {
if ((device = getDeviceOffset(argv[1])) != -1) {
ismobilepropindex = getPropertyIndex("IsMobile");
ismobilevalue = getValue(ismobilepropindex);
...
}
destroy();
} |
2/ DeviceAtlas
Il y a là également plusieurs versions pour différents langages, la version C++ (aussi multiplateforme) a, en plus, un module Apache, Nginx et IIS. Cette fois une seule et unique API unifiée qui allie plutôt bien pure performance et précision dans la détection. La consommation mémoire est plutôt raisonnable.
Les différents appels sont assez facile d'accés là également.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <mtld/devatlas.h>
using namespace Mobi::Mtld;
using namespace std;
...
Da::DeviceAtlas atlas;
Da::HeaderMap map;
try {
atlas.loadDataFromFile("/tmp/20150228.json");
map["user-agent"] = argv[1];
map["x-device-useragent"] = argv[2];
...
Da::HttpHeaders headers(map);
Da::DeliveryContext device(atlas, headers);
for (Da::DeliveryContext::const_iterator it = device.begin(); it != device.end(); ++it) {
const Da::Property *prop = it->first;
const Da::Value *val = it->second;
std::cout << prop->name << "=" << *val << "\n";
}
...
}
} catch (exception &e) {
...
} |
Ce sont bien sûr des solutions plutôt adaptées aux entreprises mais la problématique de la détection des divers appareils mobiles (tablettes et maintenant montres "intelligentes" ... etc) devenant de plus en plus complexe mais au vu de la plus grande diversité de ceux ci leur distinction étant plus que jamais nécessaire, une API de détection est un atout majeur.