{"id":3466,"date":"2010-05-25T12:37:43","date_gmt":"2010-05-25T10:37:43","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3466"},"modified":"2010-05-25T12:37:43","modified_gmt":"2010-05-25T10:37:43","slug":"t045-visualizziamo-video-di-youtube-inapp","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t045-visualizziamo-video-di-youtube-inapp\/","title":{"rendered":"T#045 &#8211; Visualizziamo i video di YouTube inApp"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_04.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_04.jpg\" alt=\"T045 Screenshot 04\" title=\"T045_Screenshot_04\" width=\"67\" height=\"100\" class=\"alignleft size-full wp-image-3492\" \/><\/a> Con questo nuovo tutorial di programmazione iPhone vedremo come <strong>aggiungere video di YouTube nelle nostre applicazioni<\/strong> che siano in grado, una volta visualizzati, di chiudere il player video e tornare al nostro programma. Non sfrutteremo quindi l&#8217;app nativa YouTube dei nostri iPhone (iPad) tramite &#8220;<em>sharedApplication<\/em>&#8220;, ma vedremo come, con poche righe di codice, potremo gestire il tutto all&#8217;interno della nostra applicazione. Per far ci\u00f2 sfrutteremo un&#8217;<strong>UIWebView<\/strong>. Precisiamo che non andremo a scaricare il video da qualche parte nel nostro device, ma creeremo una sorta di link, che ci permetter\u00e0 di lasciar gestire a YouTube la raccolta dei video, e a noi di avviarli, visualizzarli e tornare alle nostre app. Vediamo come fare.<!--more--><\/p>\n<h4>Creiamo il progetto<\/h4>\n<p>Apriamo Xcode e creiamo un nuovo progetto. Dall&#8217;elenco dei template disponibili selezioniamo &#8220;View-based Application&#8221;, se state utilizzando l&#8217;ultima versione di Xcode compatibile anche con iPad (3.2.2) selezionate &#8220;iPhone&#8221; dall&#8217;opzione &#8220;Product&#8221;, e proseguiamo. Diamo un nome al nostro progetto, ad esempio &#8220;myYouTube&#8221;, scegliamo una posizione dove salvare il progetto (ad esempio sulla scrivania) e clicchiamo infine su &#8220;Save&#8221;.<\/p>\n<p>Il progetto \u00e8 bello che pronto. Apriamo il file di intestazione &#8220;myYouTube.h&#8221; e andiamo a dichiarare gli oggetti che ci servono:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n\r\n@interface myYouTubeViewController : UIViewController {\r\n\t\r\nIBOutlet UIWebView *webView;\r\n\t\r\n}\r\n\r\n@property (nonatomic, retain) IBOutlet UIWebView *webView;\r\n\r\n@end\r\n<\/pre>\n<p>Come vedete tutto semplicissimo, abbiamo dichiarato semplicemente un oggetto <em>IBOutlet<\/em> (che collegheremo quindi ad un altro disegnato a breve tramite Interface Builder) di tipo <em>UIWebView<\/em> chiamato <em>webView<\/em>.<\/p>\n<p>Salviamo e passiamo alla creazione della semplicissima interfaccia grafica.<\/p>\n<h4>Disegnamo l&#8217;interfaccia grafica<\/h4>\n<p>Facciamo doppio click sul file &#8220;myYouTubeViewController.xib&#8221; e si aprir\u00e0 Interface Builder. Trasciniamo all&#8217;interno della View un&#8217;UIWebView, clicchiamo quindi su &#8220;File &#8216;s Owner&#8221; e colleghiamo l&#8217;oggetto appena disegnato con <em>webView<\/em> dichiarato precedentemente via Xcode. Nient&#8217;altro. Il risultato \u00e8 simile a quanto mostrato in figura:<\/p>\n<p><center><\/p>\n<div id=\"attachment_3489\" style=\"width: 330px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_01.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3489\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_01.jpg\" alt=\"T045 Screenshot 01\" title=\"T045_Screenshot_01\" width=\"320\" height=\"502\" class=\"size-full wp-image-3489\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_01.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_01-191x300.jpg 191w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p id=\"caption-attachment-3489\" class=\"wp-caption-text\">Interfaccia Grafica disegnata in IB<\/p>\n<\/div>\n<p><\/center><\/p>\n<p>Possiamo a questo punto salvare e chiudere Interface Builder.<\/p>\n<h4>Implementiamo il codice secondo le specifiche YouTube<\/h4>\n<p>Apriamo ora il file di implementazione &#8220;myYouTube.m&#8221; e modifichiamo il codice al suo interno come segue:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n\/\/Aggiungiamo l'istruzione synthesize per la nostra webView\r\n@synthesize webView;\r\n\r\n\/\/ Implement viewDidLoad to do additional setup after loading the view, typically from a nib.\r\n- (void)viewDidLoad {\r\n    [super viewDidLoad];\r\n\r\n\tNSString *linkVideo = @\"http:\/\/www.youtube.com\/watch?v=o3IKis-MJO4\";\r\n\t\r\n\tNSString *htmlString = [NSString stringWithFormat:@\"\\\r\n\t\t\t\t\t\t\t<html><head>\\\r\n\t\t\t\t\t\t\t<style type=\\\"text\/css\\\">\\\r\n\t\t\t\t\t\t\tbody {\\\r\n\t\t\t\t\t\t\tbackground-color: transparent;\\\r\n\t\t\t\t\t\t\tcolor: white;\\\r\n\t\t\t\t\t\t\t}\\\r\n\t\t\t\t\t\t\t<\/style>\\\r\n\t\t\t\t\t\t\t<\/head><body style=\\\"margin:0\\\">\\\r\n\t\t\t\t\t\t\t<embed src=\\\"%@\\\"\\\r\n\t\t\t\t\t\t\ttype=\\\"application\/x-shockwave-flash\\\" width=\\\"100\\\" height=\\\"100\\\"><\/embed>\\\r\n\t\t\t\t\t\t\t<\/body><\/html>\", linkVideo]; \r\n\t\r\n\t\/\/ Load the html into the webview\r\n\t[webView loadHTMLString:htmlString baseURL:nil];\r\n}\r\n<\/pre>\n<p>Anche qui tutto semplice. Abbiamo inserito la classica istruzione <em>@synthesize<\/em> per poter usare tutte le propriet\u00e0 della nostra webView. Successivamente abbiamo dichiarato un oggetto di tipo <em>NSString<\/em> chiamato &#8220;linkVideo&#8221; che useremo per salvare l&#8217;URL completo del nostro video (preso appunto da YouTube). Abbiamo quindi creato un&#8217;altra stringa &#8220;htmlString&#8221; contenente l&#8217;HTML necessario a mostrare l&#8217;anteprima all&#8217;interno di webView con il tasto &#8220;play&#8221; al centro di essa, che ci permetter\u00e0 di avviare il video. Si tratta di semplice HTML, scritto secondo le specifiche imposte e mostrate nel <a href=\"http:\/\/apiblog.youtube.com\/2009\/02\/youtube-apis-iphone-cool-mobile-apps.html\" target=\"_blank\">YouTube API Blog<\/a>, il quale spiega i due metodi per implementare video YouTube nelle nostre app, ovvero tramite <em>sharedApplication<\/em> o quest&#8217;altro che vi stiamo presentando.<\/p>\n<p>Fate solo attenzione al parametro &#8220;<em>src<\/em>&#8221; all&#8217;interno del tag &#8220;<em>embed<\/em>&#8221; che contiene un %@ sfrutteremo questo a fine istruzione per concatenargli l&#8217;URL del video salvato in &#8220;linkVideo&#8221;.<\/p>\n<p>Fatto ci\u00f2 non ci resta che avviare tutta la stringa al completo all&#8217;interno della nostra <em>webView<\/em>, sfruttando questa volta, <strong>loadHTMLString<\/strong>, in quanto stiamo caricando proprio del codice HTML:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n[webView loadHTMLString:htmlString baseURL:nil];\r\n<\/pre>\n<p>Anche l&#8217;implementazione \u00e8 conclusa, possiamo salvare e testare la nostra applicazione.<\/p>\n<p>Sappiate che il test andr\u00e0 fatto su device, in quanto su simulatore riusciremo a visualizzare esclusivamente il &#8220;simpaticissimo&#8221; mattoncino blu dei lego. Eccovi i due screenshot dell&#8217;app in esecuzione sia su iPhone Simulator che su iPhone:<\/p>\n<p><center><\/p>\n<div id=\"attachment_3490\" style=\"width: 396px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_02.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3490\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_02.jpg\" alt=\"T045 Screenshot 02\" title=\"T045_Screenshot_02\" width=\"386\" height=\"742\" class=\"size-full wp-image-3490\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_02.jpg 386w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_02-156x300.jpg 156w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_02-78x150.jpg 78w\" sizes=\"auto, (max-width: 386px) 100vw, 386px\" \/><\/a><\/p>\n<p id=\"caption-attachment-3490\" class=\"wp-caption-text\">Prova su iPhone Simulator<\/p>\n<\/div>\n<p><\/center><\/p>\n<p><center><\/p>\n<div id=\"attachment_3491\" style=\"width: 330px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_03.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3491\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_03.jpg\" alt=\"T045 Screenshot 03\" title=\"T045_Screenshot_03\" width=\"320\" height=\"480\" class=\"size-full wp-image-3491\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_03.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_03-200x300.jpg 200w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/T045_Screenshot_03-100x150.jpg 100w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p id=\"caption-attachment-3491\" class=\"wp-caption-text\">Prova su dispositivo iPhone<\/p>\n<\/div>\n<p><\/center><\/p>\n<h4>Considerazioni finali<\/h4>\n<p>Come potrete facilmente intuire far\u00e0 sicuramente piacere a qualsiasi utente, tornare automaticamente all&#8217;app di partenza dopo la visualizzazione di un video YouTube. Questo esempio \u00e8 tutto sommato molto semplice, ma provate ad immaginare di applicare quanto appreso ad un UITable, contenente magari tutti gli ultimi video inseriti su un canale specifico. Sarebbe davvero fastidioso, per qualunque utente del nostro programma, se per ogni video visualizzato gli toccasse passare dall&#8217;app nativa YouTube per poi ripassare alla nostra.. o forse.. probabilmente, finirebbe col non tornarci pi\u00f9 e seguire il canale direttamente dall&#8217;app nativa. Quindi anzich\u00e8 dare un servizio in pi\u00f9, se usassimo sharedApplication, rischieremmo solo di avere un utente in meno.<\/p>\n<p>Alla prossima.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Con questo nuovo tutorial di programmazione iPhone vedremo come aggiungere video di YouTube nelle nostre applicazioni che&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[236,235,234,237],"class_list":["post-3466","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-loadhtmlstring","tag-sharedapplication","tag-video-youtube-inapp","tag-youtube-api"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3466","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=3466"}],"version-history":[{"count":3,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3466\/revisions"}],"predecessor-version":[{"id":3493,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3466\/revisions\/3493"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3466"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3466"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}