什么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(希望不需要完全重新实现它)。