11

我的 Phonegap 应用程序允许浏览到一些也使用 Phonegap API 的外部站点。目前,我根据您所在的平台(Android、iOS 等)有条件地包含 Phonegap javascript。但是,我无法区分 Phonegap 应用程序和移动设备上的常规浏览器之间的区别。有没有办法更改我的 Phonegap 应用程序中的用户代理,以向我的服务器提供有关此的提示?

对此最感兴趣的 iOS 解决方案。

4

6 回答 6

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方法中添加这些行

我花了一整天的时间试图弄清楚这一点!我相信它可能对其他人有用。

于 2012-07-04T03:02:56.377 回答
7

This answer to a similar question还提到了当前 Cordova 版本中可用的首选项:

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

记录在 AndroidiOS上。

于 2015-09-25T09:14:30.620 回答
6

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

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

于 2014-12-30T20:01:53.480 回答
3

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

它还遵循 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'
 },
})
于 2015-10-22T14:47:33.677 回答
0

看到这个问题:Detect between a mobile browser or a PhoneGap application

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

于 2012-05-16T18:23:26.833 回答
0

我无法在使用 Cordova 3.3 的 iOS 中使用它,大概是因为CB-2520,但作为一个 hack,我修改CDVViewController了 .h 以使userAgent属性可读写,然后在我的控制器中简单地更新 self.userAgentviewDidLoad继承从CDVViewController.

userAgent如果时间是一个问题,你可以强行操纵CDVViewController.m.

这两个都很脏。:)

于 2014-03-20T18:50:27.370 回答