我的 Phonegap 应用程序允许浏览到一些也使用 Phonegap API 的外部站点。目前,我根据您所在的平台(Android、iOS 等)有条件地包含 Phonegap javascript。但是,我无法区分 Phonegap 应用程序和移动设备上的常规浏览器之间的区别。有没有办法更改我的 Phonegap 应用程序中的用户代理,以向我的服务器提供有关此的提示?
对此最感兴趣的 iOS 解决方案。
我的 Phonegap 应用程序允许浏览到一些也使用 Phonegap API 的外部站点。目前,我根据您所在的平台(Android、iOS 等)有条件地包含 Phonegap javascript。但是,我无法区分 Phonegap 应用程序和移动设备上的常规浏览器之间的区别。有没有办法更改我的 Phonegap 应用程序中的用户代理,以向我的服务器提供有关此的提示?
对此最感兴趣的 iOS 解决方案。
如果您仍在为该解决方案寻找快速解决方案,这就是我实现它的方式:
// 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方法中添加这些行
我花了一整天的时间试图弄清楚这一点!我相信它可能对其他人有用。
This answer to a similar question还提到了当前 Cordova 版本中可用的首选项:
<preference name="OverrideUserAgent" value="MyCordovaApp/1.2.3" />
它记录在 Android和iOS上。
CB-2520已解决,建议允许修改用户代理字符串。您现在可以通过设置 MainViewController 的baseUserAgent属性来实现这一点。对于一个简单的测试,您可以在 MainViewController 初始化后,将以下内容添加到AppDelegate.m的didFinishLaunchingWithOptions方法中:
self.viewController.baseUserAgent = @"My Custom User Agent";
如果您正在为允许更改用户代理或任何标头的 cordova 寻找更强大的 http 客户端,请尝试https://github.com/aporat/cordova-plugin-fetch。它包含经过良好测试的本机网络库(AFNetworking 2
在 ios 和OKHttp
android 上)。
它还遵循 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'
},
})
看到这个问题:Detect between a mobile browser or a PhoneGap application
我做出了贡献,但有很多答案可能适合您。
我无法在使用 Cordova 3.3 的 iOS 中使用它,大概是因为CB-2520,但作为一个 hack,我修改CDVViewController
了 .h 以使userAgent
属性可读写,然后在我的控制器中简单地更新 self.userAgentviewDidLoad
继承从CDVViewController
.
userAgent
如果时间是一个问题,你可以强行操纵CDVViewController.m
.
这两个都很脏。:)