2011-11-06 22 views
11

Podcast'im için bir uygulama yazdım, Otaku no Podcast. Uygulamanın çeşitli bölümlerinde, NSURLConnection (getiri RSS beslemeleri), UIWebView (web sitesi içeriği), AVPlayer (CDN'den MP3 ses dosyalarını çalma) ve MPMoviePlayerViewController (CDN'mizdeki video dosyalarını oynat) kullanıyorum. Şimdi, tüm bunların bir çeşit HTTP talepleri oluşturması nedeniyle, kendilerini standart iPhone Kullanıcı aracı dizesiyle tanıtacağını varsayıyorum. (eğer benim varsayım yanlışsa lütfen bana bildirin) Bu, günlük dosyalarımı okumaya dayanarak, ziyaretçilerinden hangisinin benim uygulamamı kullanarak düz eski mobil Safari üzerinden geleceğine dair hiçbir fikrim yok.iOS programım hangi HTTP Kullanıcı Aracısı ile kendini gösterir?

Kullanıcı Aracısı'nı kendi başlarına değiştirmenin bir yolu var mı? Bunu, NSURL ile nasıl yapılacağını açıklayan this question on SO buldum, ancak kullandığım yukarıdaki sınıflardan herhangi biri hakkında bilgi bulamıyorum.

cevap

1

Bu ilgili soruya bakarak (Changing the userAgent of NSURLConnection), NSURLConnection için kullanıcı aracısı değişikliği yapmak oldukça kolay görünüyor.

Diğer sınıflara gelince (UIWebView, AVPlayer, MPMoviePlayerViewController), temeldeki NSURLConnections ile uğraşmanın kolay bir yolu yoktur.

Gerçekten bütün HTTP istekleri için user-agent değiştirmek isterseniz

, ben NSURLConnection (umarım bunu reimplementing tamamen gerektirmeyen olan) yerine Objective-C Class Posing bakarak öneririz istiyorum.

8

Orijinal varsayımın kısmen yanlıştır - Uygulamanızdaki NSURLRequest'ler için özel bir Kullanıcı aracı dizesi kullanılır. Benim testlerde, dize o MobileSafari olmasa bile web siteleri cihaz için kendi HTML optimize edebilmek için

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

Ancak UIWebView bazı istekler muhtemelen bu kullanıcı aracısı dizesi

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

kullanmaktır.

2

this blog yayına göre, sözde global Kullanıcı Aracısı dizesini ayarlayabiliyor olabilirsiniz (sözdizimi, UIWebView dışındaki diğer sınıflar tarafından kullanıldığından emin değilim). söz konusu yayında yorumlarına göre

+ (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]; 
} 

, "Biz daha sonra değiştiremezsiniz" dır: Burada

ana kontrolör (veya uygulama temsilci) eklemek sınıf yöntemidir biraz abartı: UserAgent değerini daha sonra değiştirebilirsiniz, ancak release ve(5 s) 'i kullanmanız gerekir.

İlgili konular