Vidéo YouTube de lecture cassé sur iOS6 (fonctionne très bien sur iOS5)
Dans mon application, j'ai un bouton qui, lorsqu'il est pressé, vous permet de regarder une vidéo sur youtube (une bande annonce de film). Au sein de l'application, sans avoir à lancer safari. Ci-dessous vous pouvez voir un extrait de code. Ce code fonctionne pefrectly bien sous iOS5. Cependant, dans iOS 6, le UIButton dans findButtonInView est toujours nul. Les idées de ce que pourrait être la raison?
youtubeWebView.delegate = self;
youtubeWebView.backgroundColor = [UIColor clearColor];
NSString* embedHTML = @" <html><head> <style type=\"text/css\"> body {background-color: transparent; color: white; }</style></head><body style=\"margin:0\"><embed id=\"yt\" src=\"%@?version=3&app=youtube_gdata\" type=\"application/x-shockwave-flash\"width=\"%0.0f\" height=\"%0.0f\"></embed></body></html>";
NSURL *movieTrailer;
if(tmdbMovie) movieTrailer = tmdbMovie.trailer;
else movieTrailer = [NSURL URLWithString:movie.trailerURLString];
NSString *html = [NSString stringWithFormat:embedHTML,
movieTrailer,
youtubeWebView.frame.size.width,
youtubeWebView.frame.size.height];
[youtubeWebView loadHTMLString:html baseURL:nil];
[self addSubview:youtubeWebView];
- (void)webViewDidFinishLoad:(UIWebView *)_webView {
isWatchTrailerBusy = NO;
[manager displayNetworkActivityIndicator:NO];
//stop the activity indicator and enable the button
UIButton *b = [self findButtonInView:_webView];
//TODO this returns null in case of iOS 6, redirect to the youtube app
if(b == nil) {
NSURL *movieTrailer;
if(tmdbMovie) {
movieTrailer = tmdbMovie.trailer;
} else {
movieTrailer = [NSURL URLWithString:movie.trailerURLString];
}
[[UIApplication sharedApplication] openURL:movieTrailer];
} else {
[b sendActionsForControlEvents:UIControlEventTouchUpInside];
}
}
- (UIButton *)findButtonInView:(UIView *)view {
UIButton *button = nil;
if ([view isMemberOfClass:[UIButton class]]) {
return (UIButton *)view;
}
if (view.subviews && [view.subviews count] > 0) {
for (UIView *subview in view.subviews) {
button = [self findButtonInView:subview];
if (button) return button;
}
}
return button;
}
Je suis à l'aide de HTML iFrame Api (qui est d'AILLEUR moyen recommandé) pour intégrer la vidéo sur youtube et cette auto-jouer technique findButtonInView n'a jamais fonctionné pour moi (retourne la valeur null).
avez-vous un lien vers un tutoriel ou un extrait de code sur l'utilisation des iframes à la place? thx
Voir ma question et de la réponse de ici
thx. donc, cela signifie qu'Il est impossible d'avoir un bouton soit pressé de regarder une vidéo sur youtube à l'intérieur de l'app?
Elle n'a jamais travaillé pour moi, et de plus c'est un genre de hack qui n'a pas de garantie que cela fonctionnera sur la prochaine mise à jour OS.
avez-vous un lien vers un tutoriel ou un extrait de code sur l'utilisation des iframes à la place? thx
Voir ma question et de la réponse de ici
thx. donc, cela signifie qu'Il est impossible d'avoir un bouton soit pressé de regarder une vidéo sur youtube à l'intérieur de l'app?
Elle n'a jamais travaillé pour moi, et de plus c'est un genre de hack qui n'a pas de garantie que cela fonctionnera sur la prochaine mise à jour OS.
OriginalL'auteur Asem H. | 2012-09-17
Vous devez vous connecter pour publier un commentaire.
Apple a changé la façon dont les vidéos de YouTube sont traitées dans iOS6. J'ai aussi été à l'aide de la findButtonInView méthode, mais qui ne fonctionne plus.
J'ai découvert la suite semble fonctionner (non testé dans iOS < 6):
J'ai modifié le code javascript de sondage pour l'élément jusqu'à ce qu'il soit disponible avant l'envoi de l'événement click. Ceci a résolu le problème quand je l'ai vu sur certains appareils. S'il vous plaît laissez-moi savoir si cela aide!
ne fonctionne pas pour moi aussi 🙁 une autre idée?
Je confirme, cela fonctionne pour moi sur iOS6 sur mon iPhone4S! La seule chose est, vous devez attendre quelques secondes avant que ça fonctionne, mais ça fonctionne!
Quand on regarde la première vidéo, il est de travail. quand je clique sur la deuxième vidéo, le code ci-dessus ne fonctionne pas pour moi. Dois-je besoin d'ajouter des paramètres supplémentaires?
OriginalL'auteur dharmabruce
dharmabruce solution fonctionne très bien sur iOS 6, mais pour le faire fonctionner sur iOS 5.1, j'ai dû remplacer le javascript cliquez sur() avec playVideo(), et j'ai dû mettre UIWebView de mediaPlaybackRequiresUserAction PAS
Voici le code modifié:
se ma réponse - il résout le problème..
OriginalL'auteur JimmY2K.
J'ai résolu les problèmes avec dharmabruce et JimmY2K. des solutions, avec le fait qu'il ne fonctionne que la première fois qu'une vidéo est jouée, comme mentionné par Dee
Voici le code(y compris les cas quand une vidéo se termine):
Veuillez écrire votre adresse, je veux vous envoyer un cadeau!
ne fonctionne pas ici. Il a travaillé une fois peut-être, mais pour somereason il oesnt fonctionne plus.- Je avoir votre code exact! ios 6.1.x essayé de l'iphone et de simulateur de la même chose
L'homme génial..il fonctionne tout à fait 🙂 good job!!!!
OriginalL'auteur Morten Holmgaard
Non testés et ne sais pas si c'est bien le problème ici, car je ne connais pas l'URL que vous utilisez. Mais je suis tombé droit sur les éléments suivants:
de http://thetecherra.com/2012/09/12/ios-6-gm-released-full-changelog-inside/
OriginalL'auteur Marvin Emil Brach
Je suis en train de travailler sur ce même problème et je vais partager l'approche que j'ai trouvé. J'ai quelques petits défauts à travailler pour mon cas en particulier, mais l'approche générale peut travailler pour vous, selon vos exigences de l'INTERFACE utilisateur.
Si la structure de votre code HTML utilisé, de sorte que le lecteur YouTube couvre l'ensemble des limites de la UIWebView, que UIWebView devient un gros bouton de lecture - appuyez n'importe où sur la surface va faire de la vidéo de lancement dans le lecteur multimédia natif. Pour créer votre bouton, il suffit de couvrir la UIWebView avec une UIView qui a userInteractionEnabled définie sur NON. Il n'importe ce que la taille de la UIWebView est dans cette situation? Pas vraiment, puisque la vidéo va s'ouvrir dans le lecteur natif de toute façon.
Si vous souhaitez que l'utilisateur de percevoir une zone de votre INTERFACE utilisateur comme étant où la vidéo est en train de "jouer", puis vous pouvez saisir la miniature de la vidéo à partir de YouTube et de la position de la mesure. Si besoin, vous pouvez mettre un deuxième UIWebView derrière ce point de vue, donc, si l'utilisateur touche ce point de vue, la vidéo serait également lancer - ou tout simplement répandre l'autre UIWebView de sorte qu'il est "derrière" ces deux points de vue.
Si vous poster une capture d'écran de votre INTERFACE, je peux en faire d'autres suggestions précises, mais l'idée de base est de faire de la UIWebView dans un bouton en mettant une vue en face de l'interaction de l'utilisateur désactivé.
OriginalL'auteur Rob Reuss
J'ai trouvé que le code ci-dessous fonctionne pour les deux iOS5 & iOS6. Dans mon exemple, j'ai un champ texte qui contient l'url de la vidéo. J'ai d'abord convertir les formats de la même départ string 'http://m...". Puis-je vérifier pour voir si le format est l'ancien format avec le " regarder?v=' et puis le remplacer par le nouveau format. J'ai testé sur un iPhone avec iOS5 et dans les simulateurs dans iOS5 & iOS6:
OriginalL'auteur fawsha1
Je crois que le problème est que lorsque webViewDidFinishLoad a été déclenchée, le UIButton n'a pas été ajouté à la vue encore. J'ai mis en place un petit délai pour trouver le bouton après le rappel est retourné et il fonctionne pour moi sur ios5 et ios6. inconvénient est qu'il n'y a aucune garantie de la UIButton est prêt à être détecté après le retard.
J'ai dû utiliser l'url http://www.youtube.com/watch?v=videoid c'est la seule façon de travailler pour moi
OriginalL'auteur tzl
Je ne sais pas si apple va approuver ce encore, nous allons essayer de présenter une version avec ce code aujourd'hui. Vous garder les gars posté.
Apple a approuvé mon application
Steve, vous avez de la chance, mon Application a été rejeté à l'aide de ce code. Il a dit j'ai utilisé une API appelée _singleTapRecognized: Donc, je peux conseiller les gens à ne pas utiliser ce code!
Notre application a été simplement rejetée! C'est Apple raisonnement: Nous avons constaté que votre application utilise un ou plusieurs non-public des Api, ce qui n'est pas en conformité avec l'App Store d'Examen des lignes Directrices. L'utilisation de la non-public des Api n'est pas admissible, car elle peut conduire à une mauvaise expérience utilisateur doit ces Api changement. Nous avons constaté le non-public de l'API/s dans votre application: _singleTapRecognized:
OriginalL'auteur Steve