2011-11-06 14 views
11

Ho scritto un'app per il mio podcast, Otaku no Podcast. In varie parti dell'app, utilizzo NSURLConnection (recupera feed RSS), UIWebView (visualizza contenuto del sito Web), AVPlayer (riproduce file audio MP3 dal nostro CDN) e MPMoviePlayerViewController (riproduce file video dal nostro CDN). Ora, dato che tutti questi fanno richieste HTTP di qualche tipo, presumo che si pubblicizzeranno con la stringa standard User-agent di iPhone. (se la mia supposizione non è corretta per favore fatemelo sapere) Ciò significa che, in base alla lettura dei miei file di registro, non ho modo di dire quale dei miei visitatori sta arrivando tramite il semplice vecchio Safari mobile, contro l'utilizzo della mia app.Quale agente utente HTTP fa pubblicità al mio programma iOS?

C'è un modo per cambiare l'User-Agent in uno dei miei? Ho trovato this question on SO che descrive come eseguire questa operazione con NSURL ma non riesco a trovare alcuna informazione su nessuna delle classi precedenti che sto utilizzando.

risposta

1

Guardando questa domanda correlata (Changing the userAgent of NSURLConnection), sembra che sia abbastanza facile apportare un cambio di utente-agente per NSURLConnection.

Come per le altre classi (UIWebView, AVPlayer, MPMoviePlayerViewController), non esiste un modo semplice per fare confusione con le NSURLConnections sottostanti.

Se si desidera realmente modificare l'utente-agente per tutte le richieste HTTP, suggerirei di cercare in Objective-C Class Posing per sostituire NSURLConnection (che si spera non richieda di reimplementarlo completamente).

8

L'ipotesi originale è parzialmente errata. Una stringa utente personalizzata viene utilizzata per NSURLRequests dall'app. Nel mio test, la stringa è

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

Tuttavia, alcune richieste da UIWebView utilizzare questa stringa user-agent

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

presumibilmente in modo che i siti web possono ottimizzare il loro codice HTML per il dispositivo, anche se non è MobileSafari.

2

Secondo il post del blog this, potresti essere in grado di impostare una stringa pseudo-globale User-Agent (pseudo in quanto non sono sicuro di quali altre classi al di fuori di UIWebView utilizzarlo).

Ecco il metodo di classe da aggiungere al controllore principale (o app delegato):

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

Secondo i commenti su questo post, "non possiamo modificarlo in seguito" è un po 'di esagerazione: è possibile modificare il valore UserAgent in un secondo momento, ma è necessario release e restituire alloc qualsiasi UIWebView s (e presumo NSURLConnection s se lo utilizzano anche) affinché le modifiche abbiano effetto.

Problemi correlati