Встраивание видео YouTube в UIWebView с использованием библиотеки GData - PullRequest
4 голосов
/ 24 июня 2011

Я создаю приложение, которое будет иметь доступ к загрузкам YouTube определенного пользователя. Для этого я использую клиентскую библиотеку Google GData Objective-C. Я использую его, чтобы получить доступ к каналу загрузок пользователя и вернуть NSArray из GDataEntryYouTubeVideos. Используя метод htmlLink в GDataEntryYouTubeVideo, я загружаю URL-адрес в UIWebView с помощью специального HTML-кода. Тем не менее, UIWebView просто показывает красную страницу.

URL-адрес, который возвращает htmlLink, является https. Когда я вручную заменяю https на http, видео загружается в UIWebView, как и ожидалось. Следующий код не загружает видео YouTube:

- (void)viewDidLoad
{
    [super viewDidLoad];

    GDataServiceGoogleYouTube *youtubeService = [[GDataServiceGoogleYouTube alloc] init];
    NSURL *uploadUrl = [GDataServiceGoogleYouTube youTubeURLForUserID:@"higaara" userFeedID:kGDataYouTubeUserFeedIDUploads];
    void(^handler)(GDataServiceTicket *ticket, GDataFeedBase *feed, NSError *error) = ^(GDataServiceTicket *ticket, GDataFeedBase *feed, NSError *error)
    {
        NSLog(@"handler");
        // Get the link from the youtube entry
        GDataEntryYouTubeVideo *youTubeVideo = [feed firstEntry];

        NSString *htmlLinkString = [[youTubeVideo HTMLLink] href];

        // Create an html string to load into the web view
        NSString *htmlString = [NSString stringWithFormat:@"<html><head><meta name =
        \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width =
        212\"/></head><body style=\"background:#F00;margin-top:0px;margin-
        left:0px\"><div><object width=\"212\" height=\"172\"><param name=\"movie\"
        value=\"%@\"></param><param name=\"wmode\" value=\"transparent\"></param><embed
        src=\"%@\"type=\"application/x-shockwave-flash\" wmode=\"transparent\"
        width=\"212\" height=\"172\"></embed></object></div></body></html>",
        htmlLinkString, htmlLinkString];
        NSURL *tempurl = [NSURL URLWithString:@"http://onnati.net/apptrap"];
        [webView loadHTMLString:htmlString tempurl];
    };

    [youtubeService fetchFeedWithURL:uploadUrl completionHandler:handler];
}

HTML-код в htmlString взят из этого сообщения в блоге в блоге API YouTube.

Если я заменим строку создания htmlLinkString на это:

NSString *htmlLinkString = [[[youTubeVideo HTMLLink] href] stringByReplacingOccurrencesOfString:@"https://" withString:@"http://"];

тогда UIWebView правильно загружает видео.

Я не уверен, что мне здесь не хватает. Нужно ли делать что-то еще для загрузки URL-адреса https в UIWebView? Или в библиотеке GData чего-то не хватает, что возвращает стандартный незащищенный URL-адрес?

1 Ответ

0 голосов
/ 01 июня 2013

Надеемся закрыть этот старый вопрос:

Некоторые старые версии мобильного Safari автоматически переводят YouTube Flash, встраивая в интерактивные миниатюры, которые используют альтернативный механизм воспроизведения, поскольку iOS, очевидно, не поддерживает Flash. Логика превращения этих встраиваний в интерактивные ссылки, вероятно, имеет жестко заданный шаблон, который проверяет URL-адреса http://, а не https://.

Рекомендованным способом встраивания видео YouTube в iOS UIWebView является использование iframe embed . Вы можете получить идентификатор видео из API данных, а затем использовать его для создания URL-адреса iframe.

...