尽管 YouTube 应用程序现在不是 Apple 的内置应用程序,但当点击以http://www.youtube.com开头的 youtube 链接(例如,在邮件中)时,它看起来会正确打开 YouTube 应用程序离开。
对于 iOS 6 中的自定义应用程序,有没有办法做到这一点?我只知道自定义方案是通过 URL 启动应用程序的方式。
尽管 YouTube 应用程序现在不是 Apple 的内置应用程序,但当点击以http://www.youtube.com开头的 youtube 链接(例如,在邮件中)时,它看起来会正确打开 YouTube 应用程序离开。
对于 iOS 6 中的自定义应用程序,有没有办法做到这一点?我只知道自定义方案是通过 URL 启动应用程序的方式。
为您的应用注册 URL 类型
在应用的 Info.plist 文件中包含 CFBundleURLTypes 键。CFBundleURLTypes 键包含一个字典数组,每个字典都定义了应用程序支持的 URL 方案。
调用网址(如上注册)
NSURL *myURL = [NSURL URLWithString:@"todolist://www.acme.com?Quarterly%20Report#200806231300"];
[[UIApplication sharedApplication] openURL:myURL];
处理对自定义 URL 方案的调用
具有自己的自定义 URL 方案的应用程序必须能够处理传递给它的 URL。所有 URL 都会在启动时或在您的应用程序运行时或在后台传递给您的应用程序委托。要处理传入的 URL,您的委托应实现以下方法:
使用application:willFinishLaunchingWithOptions:
和application:didFinishLaunchingWithOptions:
方法检索有关 URL 的信息并决定是否要打开它。如果任一方法返回 NO,则不会调用您应用的 URL 处理代码。在 iOS 4.2 及更高版本中,使用application:openURL:sourceApplication:annotation:
方法打开文件。在 iOS 4.1 及更早版本中,使用application:handleOpenURL:
方法打开文件。如果 URL 请求到达时您的应用程序没有运行,它会启动并移动到前台,以便它可以打开 URL。您的application:willFinishLaunchingWithOptions:
orapplication:didFinishLaunchingWithOptions:
方法的实现应该从其选项字典中检索 URL 并确定应用程序是否可以打开它。如果可以,返回 YES 并让您的application:openURL:sourceApplication:annotation:
(或application:handleOpenURL:
)方法处理 URL 的实际打开。(如果您同时实现这两种方法,则在打开 URL 之前都必须返回 YES。)
如果您的应用程序正在运行,但在 URL 请求到达时处于后台或挂起状态,则会将其移至前台以打开 URL。此后不久,系统调用代理application:openURL:sourceApplication:annotation:
检查 URL 并打开它。如果您的委托未实现此方法(或当前系统版本为 iOS 4.1 或更早版本),系统将application:handleOpenURL:
改为调用您的委托的方法。
笔记
如果两个或更多应用程序注册了相同的自定义 URL,则在调用自定义 URL 时 iOS 将打开哪个应用程序无法保证。
延伸阅读
我不确定我是否理解您的问题,但这是我试图回答的问题。你问是否有办法从另一个应用程序中打开第三方应用程序。答案是,如果应用程序实现了自定义 URL 方案,则可以(请参阅此处并导航到与其他应用程序通信部分)。
但是您似乎也说您已经知道这一点。在这种情况下,我很确定没有其他办法。
我想本机邮件应用程序使用所有应用程序用来打开 URL 的相同方法(如果没有安装的应用程序可以处理 URL,它将打开一个应用程序或使用 Mobile Safari 来完成请求)。
您应该能够使用以下方法完成相同的结果:
NSString *youtubeURL = @"http://www.youtube.com/watch?v=c2JTu22qxms";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:youtubeURL]];
如果安装了 YouTube 应用程序,这将打开该应用程序;如果未安装 YouTube 应用程序,则使用 safari 播放视频。
- - 更新 - - -
我决定研究一下 YouTube 应用程序是如何做到的。
我发现了一些有趣的东西!
以下是 YouTube 应用声明的 URL:
FB[应用程序ID]
vnd.youtube
YouTube
这意味着http://www.youtube.com将请求重定向到列表中的 URL 之一。但是当我尝试它时,我没有看到 Mobile Safari 打开然后重定向。
我会继续调查,这很有趣。