Change Phonegap User Agent

13,099

Solution 1

This answer to a similar question also mentions a preference available in current Cordova versions:

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

It is documented for Android and iOS.

Solution 2

If you're still looking for a quick solution for that one, this is how I achieved it:

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

In the Phonegap (Cordova) sample app, you need to add these lines in the didFinishLaunchingWithOptions method of AppDelegate.m

I spent an entire day trying to figure this one out! I'm sure it could be useful to other people.

Solution 3

CB-2520 was resolved, which proposed allowing the user-agent string to be modified. You can achieve this now by setting the baseUserAgent property of the MainViewController. For a simple test, you can add the following to the didFinishLaunchingWithOptions method of the AppDelegate.m, after the MainViewController is initialized:

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

Solution 4

If you're looking for a more powerful http client for cordova that allows changing the user agent, or any header in that matter, try out https://github.com/aporat/cordova-plugin-fetch. it wraps around well tested native networking libraries (AFNetworking 2 on ios, and OKHttp on android).

it also follows the window.fetch, so you could use cordovaFetch on the simulators and devices, while testing on the browser with fetch.js.

Just install the plugin with

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

and include the user agent header in any request you made.

cordovaFetch('/users.json', {
  method : 'GET',
  headers: {
   'User-Agent': 'your user agent'
 },
})
Share:
13,099
Nick Retallack
Author by

Nick Retallack

Updated on June 04, 2022

Comments

  • Nick Retallack
    Nick Retallack almost 2 years

    My Phonegap application is allowed to browse to some external sites that also use the Phonegap API. Currently I am conditionally including the Phonegap javascript based on what platform you are on (Android, iOS, etc). However, I can't tell the difference between Phonegap applications and the regular browser on a mobile device. Is there a way to change the user agent in my Phonegap app to give my server a hint about this?

    Most interested in the iOS solution to this.

  • Nick Retallack
    Nick Retallack over 11 years
    Would be nice to include the android solution too.
  • Krishna
    Krishna about 11 years
    I found the Android solution at stackoverflow.com/questions/14406393/…
  • redochka
    redochka about 11 years
    To get @alanou solution working you should add the code he posted at the end of the didFinishLaunchingWithOptions method just before the return statement. It seems that [self.window makeKeyAndVisible]; must run before you can change the UA. Test OK on iPhone 4 with iOS 6.1.3
  • Mike MacMillan
    Mike MacMillan over 9 years
    CB-2520 has been resolved; CDVViewController now has a baseUserAgent property that can be modified
  • Reid
    Reid over 8 years
    This doesn't have any effect when I set it...what am I missing?