Change Phonegap User Agent
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'
},
})
Nick Retallack
Updated on June 04, 2022Comments
-
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 over 11 yearsWould be nice to include the android solution too.
-
Krishna about 11 yearsI found the Android solution at stackoverflow.com/questions/14406393/…
-
redochka about 11 yearsTo 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 over 9 yearsCB-2520 has been resolved; CDVViewController now has a baseUserAgent property that can be modified
-
Reid over 8 yearsThis doesn't have any effect when I set it...what am I missing?