2012-05-16 15 views
9

Moja aplikacja Phonegap może przeglądać witryny zewnętrzne, które również korzystają z interfejsu API Phonegap. Obecnie warunkowo włączam javascript Phonegap na podstawie platformy, na której się znajdujesz (Android, iOS, itp.). Nie potrafię jednak odróżnić aplikacji Phonegap od zwykłej przeglądarki na urządzeniu mobilnym. Czy istnieje sposób na zmianę agenta użytkownika w mojej aplikacji Phonegap, aby dać mojemu serwerowi wskazówkę na ten temat?Zmiana klienta aplikacji Phonegap

Najbardziej zainteresowani tym rozwiązaniem system iOS.

Odpowiedz

6

This answer z podobnym pytaniem wspomina również preferencje dostępne w obecne wersje Cordova:

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

jest documented for Android i iOS.

18

Jeśli wciąż szukasz szybkiego rozwiązania dla tego jednego, to w jaki sposób osiągnąć go:

// 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]; 

W PhoneGap (Cordova) app próbki, trzeba dodać te linie w didFinishLaunchingWithOpcje Metoda AppDelegate.m

Spędziłem cały dzień próbując wymyślić ten jeden! Jestem pewien, że może być użyteczny dla innych ludzi.

+2

Byłoby miło dołączyć do Androida rozwiązanie. –

+0

Znalazłem rozwiązanie dla systemu Android pod adresem http://stackoverflow.com/questions/14406393/change-phonegap-cordova-user-agent-for-ajax – Krishna

+4

Aby uzyskać działające rozwiązanie @alanou, powinieneś dodać kod, który umieścił pod koniec metoda didFinishLaunchingWithOptions tuż przed instrukcją return. Wygląda na to, że [self.window makeKeyAndVisible]; musi zostać uruchomiony, zanim będzie można zmienić UA. Test OK na iPhone 4 z iOS 6.1.3 – redochka

0

nie mogę uzyskać to do pracy w iOS korzystających Cordova 3.3, przypuszczalnie z powodu CB-2520 ale jak hack, I zmodyfikowane CDVViewController .h aby ReadWrite userAgent nieruchomości, a następnie po prostu aktualizowana self.userAgent w viewDidLoad mojego kontrolera, który dziedziczy po CDVViewController.

Jeśli wystąpił problem z czasem, można przymusowo manipulować właściwością lazy-loaded userAgent w CDVViewController.m.

Obie są bardzo brudne. :)

+0

[CB-2520] (https://issues.apache.org/jira/browse/CB-2520) został rozwiązany; CDVViewController ma teraz właściwość baseUserAgent, którą można zmodyfikować –

6

CB-2520 został rozwiązany, co proponowało zezwolenie na modyfikację łańcucha użytkownika. Możesz to osiągnąć teraz, ustawiając właściwość baseAserAgentbaseViewController. Za pomocą prostego testu, można dodać następujące do didFinishLaunchingWithOptions sposobie AppDelegate.m, po MainViewController jest inicjowany:

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

+0

Nie ma to żadnego wpływu, gdy ją ustawię ... czego mi brakuje? –

3

Jeśli szukasz wydajniejszego klienta http dla cordova, który umożliwia zmianę agenta użytkownika lub dowolnego nagłówka w tym zakresie, wypróbuj https://github.com/aporat/cordova-plugin-fetch. otacza dobrze przetestowane natywne biblioteki sieciowe (AFNetworking 2 na ios i OKHttp na Androidzie).

to także następuje window.fetch, więc można użyć cordovaFetch na symulatory i urządzenia, podczas testowania w przeglądarce z fetch.js.

Wystarczy zainstalować wtyczkę z

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

i zawierać nagłówek agenta użytkownika w każdym wniosku dokonanego.

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