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.
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.
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.
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";
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'
},
})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With