什么HTTP用户代理做我的iOS程序广告自己?
我已经为我的播客, Otaku no Podcast写了一个应用程序。 在应用程序的各个部分,我使用NSURLConnection
(获取RSS提要), UIWebView
(显示网站内容), AVPlayer
(从我们的CDN播放MP3audio文件)和MPMoviePlayerViewController
(从我们的CDN播放video文件)。 现在,由于所有这些都会产生某种types的HTTP请求,我假设他们将使用标准的iPhone用户代理string进行自我宣传。 (如果我的假设是不正确的,请让我知道)这意味着,根据阅读我的日志文件,我无法告诉我的访问者通过普通的旧移动Safari进入,与使用我的应用程序。
有没有办法将User-Agent更改为我自己的? 我在SO上发现了这个问题,它描述了如何使用NSURL
来做到这一点,但我找不到任何有关上述类的信息。
你原来的假设是部分不正确的 – 自定义的用户代理string用于从您的应用程序的NSURLRequests。 在我的testing中,string是
<product-name>/<build-number> CFNetwork/548.0.3 Darwin/11.2.0
但是,来自UIWebView的一些请求使用此用户代理string
Mozilla/5.0 (iPhone Simulator; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9A334
大概是这样,即使网站不是MobileSafari,网站也可以为设备优化其HTML。
根据这个博客文章,你可能能够设置一个伪全局用户代理string(伪,我不知道UIWebView
以外的其他类使用它)。
以下是添加到主控制器(或应用程序委托)的类方法:
+ (void)initialize { // Set user agent (the only problem is we can't modify it later) NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys: @"Your desired user agent", @"UserAgent", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; [dictionary release]; }
根据对这篇文章的评论,“我们不能稍后修改”有点多余:你可以稍后修改UserAgent
值,但是你必须release
和重新alloc
任何UIWebView
(我假设NSURLConnection
如果他们也使用它)更改才能生效。
看看这个相关的问题( 改变NSURLConnection的userAgent ),看起来很容易做NSURLConnection的用户代理更改。
至于其他类(UIWebView,AVPlayer,MPMoviePlayerViewController),没有简单的方法混淆底层NSURLConnections。
如果你真的想改变所有的HTTP请求的用户代理,我会build议看看Objective-C类构成来取代NSURLConnection(希望不需要完全重新实现它)。