2011-11-06 5 views
11

私はポッドキャスト用のアプリを書いた、Otaku no Podcastです。アプリのさまざまな部分では、NSURLConnection(RSSフィードを取得)、UIWebView(ウェブサイトコンテンツを表示)、AVPlayer(CDNからMP3オーディオファイルを再生)、MPMoviePlayerViewController(CDNからビデオファイルを再生)を使用します。さて、これらのすべてが何らかの種類のHTTPリクエストを作成するので、標準のiPhone User-agent文字列で自分自身を宣伝すると仮定しています。 (私の仮定が間違っていると私に知らせてください)これは、私のログファイルを読むことに基づいて、私の訪問者の誰かが普通の古いモバイルSafariを使って来ているのか、私のアプリを使っているのかを知らせることができないということです。私のiOSプログラムは、どのようなHTTPユーザエージェントを広告しますか?

User-Agentを自分のものに変更する方法はありますか? NSURLでこれを行う方法を説明しているthis question on SOが見つかりましたが、私が使用している上記のクラスに関する情報は見つかりませんでした。

答えて

1

この関連する質問(Changing the userAgent of NSURLConnection)を見ると、NSURLConnectionのユーザーエージェントの変更を非常に簡単に行うことができるようです。

他のクラス(UIWebView、AVPlayer、MPMoviePlayerViewController)に関しては、基礎となるNSURLConnectionsを混乱させる簡単な方法はありません。

実際にすべてのHTTPリクエストのuser-agentを変更したい場合は、NSURLConnectionを置き換えるためにObjective-C Class Posingを探してみることをお勧めします(完全に再実装する必要はありません)。

8

あなたの元々の仮定は部分的に間違っています - あなたのアプリからのNSURLRequestsにはカスタムのユーザーエージェント文字列が使用されています。ウェブサイトはそれはMobileSafariない場合でも、デバイスのための彼らのHTMLを最適化できるように、私のテストでは、文字列が

<product-name>/<build-number> CFNetwork/548.0.3 Darwin/11.2.0 

しかし、のUIWebViewからいくつかの要求は、このユーザーエージェント文字列おそらく

Mozilla/5.0 (iPhone Simulator; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9A334 

を使用しています。

2

thisブログ記事によると、擬似グローバルUser-Agent文字列を設定することができます(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との再sを返す必要があります。変更を有効にするには、とUIWebViewが必要です。

関連する問題