XCode Tips&Tricks #9 – Cambiare lo UserAgent delle UIWebView

Rieccoci per un nuovo tips&tricks dedicato alla programmazione per iPhone SDK. Oggi vedremo come cambiare l’user agent delle UIWebView.

Lo UserAgent è, nella sua accezione più usata ma forse meno precisa, è un parametro che ci fornisce delle indicazioni su chi (o che cosa) si è connesso ad un server web. Per farvi un esempio, ogni browser ha il suo UserAgent, così come ogni applicazione che accede ad un server. Lo user agent permette di ricavare informazioni quali il browser utilizzato, il sistema operativo ed altro.

Questa informazione viene anche utilizzata quando utilizzate Safari Mobile per accedere ai vostri siti preferiti: sfruttando tale informazione, infatti, sarà possibile caricare una versione ottimizzata del sito web (come accada anche se aprite BubiDevs dal vostro iPhone).

Oggi vedremo come variare lo UserAgent dei componenti UIWebView, in modo che possiate avere un metodo per caricare pagine web personalizzate, magari con componenti visibili solo all’interno della vostra applicazione.

Per prima cosa, inserite il delegato “UIWebViewDelegate” nella vostra classe. Eccovi un esempio:

@interface ViewSafariController : UIViewController  {

Fatto ciò, dovrete implementare tale metodo:

/* Modifica l'user agent del browser, in modo da caricare la pagina corretta */
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)req navigationType:(UIWebViewNavigationType)navigationType {
    NSMutableURLRequest *request = (NSMutableURLRequest *)req;

    if ([request respondsToSelector:@selector(setValue:forHTTPHeaderField:)]) {
        [request setValue:[NSString stringWithFormat:@"%@ AppNuova", [request valueForHTTPHeaderField:@"User-Agent"]] forHTTPHeaderField:@"User_Agent"];
    }
    return YES;
}

È obbligatorio inserire il codice che vi ho appena riportato in questo metodo, altrimenti il vostro UserAgent non varierà e rimarrà sempre lo stesso (ve lo dico per esperienza personale xD).

La riga importante è la 6, in cui notate come abbiamo inserito “AppNuova” come UserAgent della nostra applicazione. Semplice vero?

Eccovi ora una prova di quello che abbiamo appena creato. Per un’applicazione che sto realizzando dovevo eliminare l’header del tema WPTouch (quello che utilizzo anche io nella versione mobile del blog), quindi ho inserito del codice php che mi controlla l’user agent del browser che carica la pagina: se esso corrisponde all’applicazione, non viene caricato l’header, altrimenti viene caricata normalmente l’intera pagina. Eccovi i due screen dimostrativi:

Spero che questo tips possa tornarvi utile, a me è servito per rendere l’aspetto grafico dell’applicazione più pulito e professionale!

Al prossimo “XCode Tips&Tricks”!

Ingegnere informatico e sviluppatore freelance, mi occupo da anni di sviluppo per iOS (ma non solo). Dal 2008 scrivo su questo piccolo blog (con qualche lunga pausa), in cui parlo di programmazione e di qualsiasi altra cosa che mi diverta.

8 comments On XCode Tips&Tricks #9 – Cambiare lo UserAgent delle UIWebView

  • utilissimo come ogni tuo Tips! Grazie 🙂

  • Alessandro Messineo

    Complimenti anche per questo Tips 😀
    Una piccola richiesta: se io volessi mostrare in una UIWebView la versione Mobile di YouTube ma visualizzare però solo il risultato della ricerca come potrei eliminare la la parte iniziale (dove c’è il logo di YT e le informazioni sull’account ecc) e terminale della pagina? Volevo così centrare solo il contenuto dove mostra il risultato della mia richiesta.

    Credo possa essere interessante per molti poter mostrare solo determinati elementi presenti nelle pagine web 🙂

    grazie

  • Ottimo tips: ho già in mente dove mi potrà servire…

  • @Alessandro Messineo: purtroppo per fare quello che dici tu non ho trovato un metodo veloce..

    bisogna leggere l’html della pagina e provare a modificarlo, però non è così facile e non sempre funziona..

    se riesco a fare qualcosa ovviamente lo posterò sul blog 😉

  • Ciao lo so che sono passati un po’ di mesi ma ho letto il post solo ora e stavo provando a cambiare useragent, non ottengo errori ho seguito tutti i punti, ma lo useragent non mi viene cambiato, uso un sdk 2.2.1, mi potresti dare delle indicazioni? grazie

  • @Lele: ciao, assicurati di aver inserito il delegato nella definizione della classe..
    purtroppo per qualche strano motivo esso era scomparso dal codice nella’articolo, ora l’ho sistemato 😉

    Fammi sapere!

  • Non mi funziona.. ho inserito il delegato nel .h e incollato il codice nel .m (cambiano solo lo user agent, il mio è “app”) ma niente..

  • Davvero fantastici! Cerco questa guida da mesi! Fantastici, meglio di DevApp per me!

Leave a Reply to Alessandro Messineo Cancel Reply

Your email address will not be published.

Site Footer