Changer l'agent d'user Phonegap

Mon application Phonegap est autorisée à naviguer vers certains sites externes qui utilisent également l'API Phonegap. Actuellement, je suis conditionnellement y compris le javascript Phonegap basé sur quelle plate-forme vous êtes sur (Android, iOS, etc). Cependant, je ne peux pas faire la différence entre les applications Phonegap et le browser normal sur un appareil mobile. Y at-il un moyen de changer l'agent user dans mon application Phonegap pour donner un indice à mon server à ce sujet?

Plus intéressé par la solution iOS à cela.

Cette réponse à une question similaire mentionne également une preference disponible dans les versions actuelles de Cordova:

<preference name="OverrideUserAgent" value="MyCordovaApp/1.2.3" /> 

Il est documenté pour Android et iOS .

Si vous cherchez toujours une solution rapide pour cela, voici comment je l'ai réalisé:

 // Modify the user-agent NSSsortingng* suffixUA = @" my nice user-agent suffix"; UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectZero]; NSSsortingng* defaultUA = [webView ssortingngByEvaluatingJavaScriptFromSsortingng:@"navigator.userAgent"]; NSSsortingng* finalUA = [defaultUA ssortingngByAppendingSsortingng:suffixUA]; NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:finalUA, @"UserAgent", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; 

Dans l'exemple d'application Phonegap (Cordova), vous devez append ces lignes dans la méthode didFinishLaunchingWithOptions de AppDelegate.m

J'ai passé une journée entière à essayer de comprendre celui-ci! Je suis sûr que cela pourrait être utile à d'autres personnes.

Le CB-2520 a été résolu, qui proposait de modifier la string de l'agent user. Vous pouvez le faire maintenant en définissant la propriété baseUserAgent de MainViewController . Pour un test simple, vous pouvez append ce qui suit à la méthode didFinishLaunchingWithOptions de AppDelegate.m , après l'initialisation de MainViewController :

self.viewController.baseUserAgent = @"My Custom User Agent";

Si vous searchz un client http plus puissant pour cordova qui permet de modifier l'agent user, ou n'importe quel en-tête, essayez https://github.com/aporat/cordova-plugin-fetch . il enveloppe des bibliothèques réseau natives bien testées ( AFNetworking 2 sur ios, et OKHttp sur android).

il suit également window.fetch, de sorte que vous pouvez utiliser cordovaFetch sur les simulateurs et les périphériques, tout en testant sur le browser avec fetch.js .

Installez simplement le plugin avec

cordova plugin add https://github.com/aporat/cordova-plugin-fetch.git

et incluez l'en-tête de l'agent user dans toute requête que vous avez faite.

 cordovaFetch('/users.json', { method : 'GET', headers: { 'User-Agent': 'your user agent' }, }) 

Voir cette question: Détecter entre un browser mobile ou une application PhoneGap

J'ai fait une consortingbution mais il y a beaucoup de réponses qui peuvent vous convenir.

Je ne pouvais pas get cela pour travailler dans iOS en utilisant Cordova 3.3, sans doute à cause de CB-2520 mais, en tant que bidouille, j'ai modifié CDVViewController .h pour rendre la propriété userAgent readwrite, puis simplement mis à jour self.userAgent dans viewDidLoad de mon controller qui hérite de CDVViewController .

Si le timing est un problème, vous pouvez manipuler de force la userAgent paresseuse dans CDVViewController.m .

Les deux sont très sales. 🙂