2012-05-16 2 views
9

L'applicazione PhoneGap consente di esplorare alcuni siti esterni che utilizzano anche l'API Phonegap. Attualmente sto includendo condizionatamente il javascript Phonegap in base alla piattaforma su cui ti trovi (Android, iOS, ecc.). Tuttavia, non posso dire la differenza tra le applicazioni PhoneGap e il normale browser su un dispositivo mobile. C'è un modo per cambiare l'agente utente nella mia app Phonegap per dare al mio server un suggerimento su questo?Cambia utente utente PhoneGap

I più interessati alla soluzione iOS.

risposta

6

This answer a una domanda simile cita anche una preferenza disponibile in le versioni attuali Cordova:

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

è documented for Android e iOS.

18

Se siete ancora alla ricerca di una soluzione rapida per quello, questo è quanto ho raggiunto è:

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

Nel PhoneGap (Cordova) campione di app, è necessario aggiungere queste linee nel didFinishLaunchingWithOptions metodo AppDelegate.m

ho trascorso un'intera giornata cercando di capire questo fuori! Sono sicuro che potrebbe essere utile ad altre persone.

+2

Sarebbe bello includere anche la soluzione Android. –

+0

Ho trovato la soluzione Android all'indirizzo http://stackoverflow.com/questions/14406393/change-phonegap-cordova-user-agent-for-ajax – Krishna

+4

Per ottenere la soluzione @alanou, dovresti aggiungere il codice che ha pubblicato alla fine di il metodo didFinishLaunchingWithOptions appena prima dell'istruzione return. Sembra che [self.window makeKeyAndVisible]; deve essere eseguito prima di poter modificare UA. Test OK su iPhone 4 con iOS 6.1.3 – redochka

0

non ho potuto ottenere questo lavoro in iOS utilizzando Cordova 3.3, presumibilmente a causa di CB-2520, ma, come un hack, ho modificato CDVViewController .h per rendere il readwrite userAgent proprietà, e poi semplicemente aggiornato self.userAgent nel viewDidLoad del mio controller che eredita da CDVViewController.

Se il tempo è un problema, è possibile manipolare forzatamente la proprietà lazy-loaded userAgent in CDVViewController.m.

Entrambe sono molto sporche. :)

+0

[CB-2520] (https://issues.apache.org/jira/browse/CB-2520) è stato risolto; CDVViewController ha ora una proprietà baseUserAgent che può essere modificata –

6

CB-2520 è stato risolto, che ha proposto di consentire la modifica della stringa utente-agente. È possibile ottenere ciò ora impostando la proprietà baseUserAgent di MainViewController. Per un semplice test, è possibile aggiungere la seguente alle didFinishLaunchingWithOptions metodo AppDelegate.m, dopo il MainViewController viene inizializzato:

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

+0

Questo non ha alcun effetto quando lo imposto ... cosa mi manca? –

3

Se stai cercando un client http più potente per cordova che consenta di modificare l'interprete o qualsiasi intestazione in tale materia, prova https://github.com/aporat/cordova-plugin-fetch. avvolge librerie di rete native ben collaudate (AFNetworking 2 su iOS e OKHttp su Android).

segue anche window.fetch, quindi è possibile utilizzare cordovaFetch sui simulatori e sui dispositivi, durante il test sul browser con fetch.js.

Basta installare il plugin con

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

e includere l'intestazione agente utente in qualsiasi richiesta che hai fatto.

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