2012-04-25 2 views
5

Buon giorno,Youtube evento licenziamento (iOS)

Attraverso l'uso di un UIWebView ho ora un metodo di lavoro per mostrare un video di YouTube nel mio app (utilizzando il tag, trovare il pulsante di riproduzione all'interno del WebView e cottura l'evento di tocco su quello).

Funziona come un fascino. Il video si apre e suona. Tuttavia, desidero ricevere un evento quando il video termina o l'utente fa clic sul pulsante Fine.

Su internet ho scoperto che c'è un evento: MPAVControllerItemPlaybackDidEndNotification dove si può ascoltare. Tuttavia questo non viene chiamato.

Dopo alcune ricerche ulteriori ho scoperto che per i video di YouTube incorporati tramite UIWebView veniva chiamata un'altra notifica (UIMoviePlayerControllerDidExitFullscreenNotification). Purtroppo quello non funziona più neanche. (found it here)

Qualcuno ha qualche idea di come posso fare qualche azione dopo che il video è finito di giocare o è stato licenziato?

Grazie

risposta

-1

cosa avete bisogno qui è qualcosa di simile:

- (void)playerWillExitFullscreen:(NSNotification *)notification 
{ 
//do something... 
} 

[[NSNotificationCenter defaultCenter] addObserver:self 
            selector:@selector(playerWillExitFullscreen:) 
name:@"MPMoviePlayerWillExitFullscreenNotification" object:nil]; 
+0

Avete provato con iOS 6? Provato prima, la notifica non sta sparando qui. – fabb

+0

MPMoviePlayerWillExitFullscreenNotification funziona per me su iOS 6. Puoi controllare se funziona per te? – defactodeity

+0

Sfortunatamente, non funziona per me. Forse ha a che fare con il fatto che utilizzo un video Youtube all'interno di un UIWebView? – fabb

5

Utilizzare la UIMoviePlayerControllerWillExitFullscreenNotification per ottenere una notifica una volta che l'utente sfruttato sul pulsante FATTO. Lo UIMoviePlayerControllerDidExitFullscreenNotification sembra davvero essere omesso su iOS6.

Ricordate che ... Forse ... vs ... Will ... differenza!

Per maggiori informazioni su questo argomento, ancora una volta controllare la mia risposta aggiornato all'interno di quel distacco si fa riferimento nella sua interrogazione. sguardo

+2

Non funziona in iOS 8 –

0

Let a questo scenario:

enter image description here

Secondo lei, si dispone di un pulsante. Quando si fa clic, si desidera riprodurre direttamente il video. Al fine, per farlo, si apre la WebView come vista modale della vista:

[self presentModalViewController:videoWebView animated:NO]; 

Per la vostra WebView, è necessario utilizzare Youtube API per integrare e riprodurre automaticamente il video. Guarda l'esempio di lavoro proposto qui: https://stackoverflow.com/a/15538968

Vedrai che il video viene lanciato in una vista modale della tua vista webview. Un modo per rilevare quando il video è stato rimosso (quando il pulsante "completato" è stato premuto) consiste nell'utilizzare lo viewDidAppear nella classe di visualizzazione webview. Con questo metodo, la visualizzazione di Webview verrà ignorata ma ... quando questa visualizzazione viene avviata inizialmente, non si desidera ignorarla. È possibile aggiungere una proprietà booleana per evitarlo.

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    if (_videoLaunched) { 
     [self dismissModalViewControllerAnimated:YES]; 
    } 
} 

Nel metodo viewDidLoad, impostare questa proprietà su NO e nel metodo webViewDidFinishLoad (metodo delegato di webview) impostarlo SI.

Penso che risponda a una parte della tua domanda.Per quanto riguarda il rilevamento della fine del video, è necessario modificare il file YT_Player.html per ascoltare le modifiche dello stato.

ytPlayer = new YT.Player('media_area', {height: '100%', width: '100%', videoId: 'SbPFDcspRBA', 
           events: {'onReady': onPlayerReady, 'onStateChange': onPlayerStateChange} 

function onPlayerStateChange(e) { 
     var result = JSON.parse(event.data); 
     if (result.info == 0) { // Video end 
      window.location = "videomessage://end"; 
     } 
    } 
           }); 

Sarà quindi catturare l'evento nella vostra vista WebView e respingerlo in questo modo:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    NSURL *url = request.URL; 
    if ([[url scheme] isEqualToString:@"videomessage"]) { 
     [self dismissModalViewControllerAnimated:YES]; 
     return YES; 
    } 
    return YES; 
}