我正在构建一个可以访问特定用户的YouTube上传的应用。为此,我正在使用Google的GData Objective-C客户端库。我用它来访问用户的上传Feed并返回一个GDataEntryYouTubeVideos的NSArray。使用GDataEntryYouTubeVideo的htmlLink方法,我将url加载到带有一些特殊HTML代码的UIWebView中。但是,UIWebView只显示一个红色页面。
htmlLink返回的网址是https。当我用http手动替换https时,视频会按预期加载到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];
}
htmlString中的html代码来自YouTube API博客上的blog post。
如果我用这个替换htmlLinkString创建行:
NSString *htmlLinkString = [[[youTubeVideo HTMLLink] href] stringByReplacingOccurrencesOfString:@"https://" withString:@"http://"];
然后UIWebView正确加载视频。
我不确定我在这里缺少什么。 我是否需要做更多的工作才能将https网址加载到UIWebView中?或者GData库中是否存在一些返回标准非安全网址的内容?
答案 0 :(得分:0)
希望能够结清这个老问题:
某些旧版本的移动版Safari会自动将YouTube Flash嵌入到可点击的缩略图中,这些缩略图会使用其他播放机制,因为iOS显然不支持Flash。将这些嵌入转换为可点击链接的逻辑可能具有硬编码模式,可以检查http://
而不是https://
网址。
在iOS UIWebView中嵌入YouTube视频的推荐方法是使用iframe embed。您可以从Data API获取视频ID,然后使用它来构建iframe网址。