Nel 2006 l'acquisizione di YouTube da parte di Google ha rappresentato uno dei più grandi colpi di mercato della storia dell'informatica: il maggiore provider di video esistente è entrato a far parte dei servizi offerti da Google. Questa integrazione ha aggiunto un'ulteriore sfaccettatura al profilo dell'utente: se infatti Plus ne raccoglie il vissuto, GMail lo mette in comunicazione con il mondo e Drive ne racchiude buona parte dell'attività lavorativa, YouTube ne racconta con voce e immagini le passioni e gli interessi.
In questa lezione, vedremo come le funzionalità di YouTube possono essere integrate nelle app Android fornendo un valore aggiunto notevole. L'approccio che utilizzeremo, tuttavia, sarà leggermente diverso da quello cui questa guida ci ha abituato. Creeremo credenziali di accesso ugualmente tramite la Google Developers Console, ma le funzionalità necessarie non verranno offerte dai Google Play Services, bensì da una libreria resa disponibile su Internet.
Integrare un player nelle app
Iniziamo esaminando l'integrazione di un Player video nelle app, forse la funzionalità più interessante per chi approccia le API di Youtube.
Il primo passo da compiere per ottenere questo risultato è scaricare l'apposita libreria indicata dalla documentazione ufficiale.
L'archivio così ottenuto deve essere estratto e il file .jar al suo interno collocato opportunamente nel classpath del progetto Android. Solitamente, a tale scopo è presente una cartella libs sia su Eclipse ADT che su Android Studio.
A questo punto è necessario collegarsi alla Google Developers Console.
Quello che dovremo avere a disposizione è un progetto Google con al suo interno una chiave di tipo Public API Access. Le istruzioni per svolgere tali operazioni sono state fornite nei capitoli precedenti di questa guida, pertanto non è necessario ripeterle in questa sede. Si raccomanda, comunque, di prestare attenzione in fase di creazione delle credenziali di autenticazione, utilizzando il corretto package Java del progetto Android.
Infine, sarà necessario predisporre, all'interno del file AndroidManifest.xml, la permission relativa all'accesso alla Rete:
<uses-permission android:name="android.permission.INTERNET" />
Tale permission va collocata al di fuori del nodo <application>.
Finita la fase di preparazione preliminare, si può procedere alla collocazione del player YouTube all'interno della nostra Activity.
Per prima cosa, inseriremo nel layout un controllo fornito dalla libreria precedentemente scaricata, YouTubePlayerView, appartenente al package com.google.android.youtube.player.
Il controllo personalizzato è già pronto, è va semplicemente incluso in un layout, come mostrato nel seguente esempio:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.youtube.player.YouTubePlayerView
android:id="@+id/player"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
L'Activity deve obbligatoriamente estendere la classe YouTubeBaseActivity ed implementare YouTubePlayer.OnInitializedListener che richiede l'override dei due metodi onInitializationSuccess
e onInitializationFailure
i quali, rispettivamente, gestiscono un successo o un fallimento in fase di inizializzazione.
All'interno dell'Activity predisporremo una stringa che conterrà la chiave per l'accesso Public API che abbiamo ricavato dalla Google Developers Console in fase di preparazione.
Prima di vedere il codice, è necessario ricordare che l'indirizzo dei video su YouTube ha il seguente formato:
https://www.youtube.com/watch?v=2zNSgSzhBgM
dove la stringa finale 2zNSgSzhBgM
rappresenta l'identificativo della risorsa multimediale.
Come vedremo, il Player disponibile nella libreria avrà bisogno di questo solo identificativo per riconoscere il video. Nell'esempio, verrà conservato in un apposito membro privato interno dell'Activity, di nome VID.
public class MainActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener
{
private String API_KEY=”API_KEY";
public static final String VID = "2zNSgSzhBgM";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
YouTubePlayerView youTubePlayerView = (YouTubePlayerView) findViewById(R.id.player);
youTubePlayerView.initialize(API_KEY, this);
}
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored)
{
if (!wasRestored)
youTubePlayer.cueVideo(VID);
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult)
{
// codice di segnalazione dell'errore
}
}
Per l'esecuzione dell'esempio sarà solo necessario inserire la propria API KEY ed utilizzare un identificativo del video valido (quello utilizzato nell'esempio è inesistente).
È interessante notare il contenuto del metodo onInitializationSuccess. Il valore booleano passato come terzo parametro indica se il video può essere ricaricato da un salvataggio precedente. Nel caso in cui tale valore sia falso, viene invocato cueVideo
, che svolge tutta la fase di caricamento e preparazione del contenuto. Il secondo parametro, di tipo YouTubePlayer, può essere utile per curare ogni fase dell'esecuzione e dello scaricamento del filmato, tra cui l'impostazione di una serie di listener che permetteranno di affrontare qualsiasi situazione si verifichi.
Le librerie messe a disposizione per questo Youtube sono molto ricche e divise in sezioni. Quelle usate in questo esempio ricadono nell'ambito delle Player API, ma molto importanti sono anche le Data API e le Analytics API, che offrono accesso ai dati e alle informazioni statistiche dei video.