2012-05-16 2 views
9

Приложение My Phonegap позволяет просматривать некоторые внешние сайты, которые также используют API Phonegap. В настоящее время я условно включаю javascript Phonegap на основе той платформы, на которой вы находитесь (Android, iOS и т. Д.). Однако я не могу сказать разницу между приложениями Phonegap и обычным браузером на мобильном устройстве. Есть ли способ изменить агент пользователя в приложении Phonegap, чтобы дать моему серверу подсказку об этом?Пользовательский агент Phonegap

Больше всего интересуется решением iOS.

ответ

6

This answer на подобный вопрос также упоминает предпочтение имеющегося в Текущая версия Кордова:

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

это documented for Android и iOS.

18

Если вы все еще ищете для быстрого решения для этого один, это, как я достиг этого:

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

В (Кордова) пример приложения PhoneGap, вам нужно добавить эти строки в didFinishLaunchingWithOptions метод AppDelegate.m

я провел целый день, пытаясь понять это! Я уверен, что это может быть полезно другим людям.

+2

Было бы неплохо включить решение для Android. –

+0

Я нашел решение для Android на http://stackoverflow.com/questions/14406393/change-phonegap-cordova-user-agent-for-ajax – Krishna

+4

Чтобы получить решение @alanou, вы должны добавить код, который он опубликовал в конце метод didFinishLaunchingWithOptions непосредственно перед оператором return. Кажется, что [self.window makeKeyAndVisible]; должен работать, прежде чем вы сможете изменить UA. Тестирование OK на iPhone 4 с iOS 6.1.3 – redochka

0

Я не мог заставить это работать в прошивкой с использованием Кордовы 3.3, предположительно, из-за CB-2520, но, как взломать, я изменил CDVViewController .h сделать userAgent свойства READWRITE, а затем просто обновляется self.userAgent в viewDidLoad моего контроллера, который наследует от CDVViewController.

Если время является проблемой, вы можете принудительно управлять 0 л.

Оба эти очень грязные. :)

+0

[CB-2520] (https://issues.apache.org/jira/browse/CB-2520) разрешено; Теперь у CDVViewController есть свойство baseUserAgent, которое может быть изменено. –

6

CB-2520 было разрешено, что позволило разрешить изменение строки пользовательского агента. Вы можете достичь этого, установив для свойства MainViewController значение baseUserAgent. Для простого теста, вы можете добавить следующее к didFinishLaunchingWithOptions способа AppDelegate.m, после MainViewController инициализации:

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

+0

Это не имеет никакого эффекта, когда я его устанавливаю ... что мне не хватает? –

3

Если вы ищете более мощный клиент http для кордовы, который позволяет изменять пользовательский агент или любой заголовок в этом отношении, попробуйте https://github.com/aporat/cordova-plugin-fetch. он обертывает хорошо протестированные собственные сетевые библиотеки (AFNetworking 2 на ios и OKHttp на Android).

он также следует за окном.fetch, поэтому вы можете использовать cordovaFetch на тренажерах и устройствах, а при тестировании в браузере - fetch.js.

Просто установите плагин с

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

и включает в себя заголовок агента пользователя в любом запросе вы сделали.

cordovaFetch('/users.json', { 
    method : 'GET', 
    headers: { 
    'User-Agent': 'your user agent' 
}, 
}) 
Смежные вопросы