更改Phonegap用户代理

时间:2012-05-16 18:12:41

标签: ios cordova user-agent

我的Phonegap应用程序可以浏览到一些也使用Phonegap API的外部网站。目前我有条件地包括Phonegap javascript基于你在哪个平台(Android,iOS等)。但是,我无法区分Phonegap应用程序与移动设备上的常规浏览器之间的区别。有没有办法在我的Phonegap应用程序中更改用户代理,以便为我的服务器提供有关此内容的提示?

最感兴趣的iOS解决方案。

6 个答案:

答案 0 :(得分: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(Cordova)示例应用中,您需要在 AppDelegate.m didFinishLaunchingWithOptions 方法中添加这些行

我花了一整天的时间试图弄明白这个!我确信它对其他人有用。

答案 1 :(得分:6)

CB-2520已解决,建议允许修改用户代理字符串。您现在可以通过设置MainViewController的 baseUserAgent 属性来实现此目的。对于简单的测试,您可以在初始化MainViewController之后将以下内容添加到 AppDelegate.m didFinishLaunchingWithOptions 方法中:

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

答案 2 :(得分:6)

This answer对类似的问题也提到了当前Cordova版本中的首选项:

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

documented for AndroidiOS

答案 3 :(得分:3)

如果您正在为cordova寻找更强大的http客户端,允许更改用户代理或任何标题,请尝试https://github.com/aporat/cordova-plugin-fetch。它包含经过良好测试的本机网络库(ios上的AFNetworking 2和android上的OKHttp。)

它也跟在window.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'
 },
})

答案 4 :(得分:0)

请参阅此问题:Detect between a mobile browser or a PhoneGap application

我做出了贡献,但有很多答案可能适合你。

答案 5 :(得分:0)

我无法使用Cordova 3.3在iOS中工作,可能是因为CB-2520但是,作为一个黑客,我修改了CDVViewController。h以使userAgent属性读写,然后简单地更新我的控制器的viewDidLoad中继承自CDVViewController的self.userAgent。

如果时间问题,您可以强行操纵userAgent中的CDVViewController.m延迟加载属性。

这两个都很脏。 :)