使用域名启动自定义应用程序的URL

9
即使现在YouTube应用程序不再是苹果公司内置的应用程序,但当点击以http://www.youtube.com开头的YouTube链接(例如在邮件中),它会立即打开YouTube应用程序。
在iOS 6中是否有一种方法可以对自定义应用程序执行此操作? 我只知道通过URL启动应用程序的自定义方案。

这是我之前尝试发布在答案中却被删除的链接。抱歉,@ChrisF…… 我还在学习中。 - codeqi
我发了一篇回答,尽可能深入地解答了您的问题。当我为我的应用程序注册自定义URL时,我也遵循了完全相同的步骤。您能看看下面的回答是否解决了您的问题吗? - SashaZd
@SashaZd,你的深入回答与问题无关,因为它没有解释YouTube应用程序如何实现其功能。 - Léo Natan
3个回答

2

注册应用程序的URL类型

在应用程序的Info.plist文件中包含CFBundleURLTypes键。CFBundleURLTypes键包含一个字典数组,每个字典定义了应用程序支持的URL scheme。

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:application: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,则无法保证iOS在调用自定义URL时打开哪个应用程序。

进一步阅读

iOS应用程序编程指南 :: 高级技巧和技巧


谢谢,我在问题中提到了我知道自定义URL方案,并且正在寻找一种不需要它们的方法,就像YouTube一样。 - Danra
1
YouTube使用自定义URL方案。你认为它不会使用吗?www.youtube.com/watch?是分配给YouTube的自定义URL方案。 - SashaZd
你为什么认为www.youtube.com/watch?是一个URL方案? - Bogdacutu
1
它启动应用程序的事实?!那是你唯一能做的方式。 - SashaZd

2
我不确定我理解了你的问题,但我会尝试回答。你问是否有一种方法可以从另一个应用程序中打开第三方应用程序。答案是如果应用程序已经实现了自定义URL方案(请参见此处并导航到与其他应用程序通信部分),则可以这样做。
但是你似乎已经知道了这一点。在这种情况下,我相信没有其他方法。

0

我想原生的邮件应用程序使用与所有应用程序打开URL相同的方法(如果没有安装的应用程序可以处理URL,则将打开应用程序或使用Mobile Safari完成请求)。

您应该能够使用以下方法实现相同的结果:

NSString *youtubeURL = @"http://www.youtube.com/watch?v=c2JTu22qxms";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:youtubeURL]];

如果已安装YouTube应用程序,则将打开该应用程序,否则将使用Safari播放视频。

---- 更新 -----

我决定研究一下YouTube应用程序的具体操作方式。

我发现了一些有趣的东西!

以下是YouTube应用程序声明的URL:

  • fb[appID]

  • vnd.youtube

  • youtube

这意味着http://www.youtube.com将请求重定向到列表中的一个URL。但是当我尝试时,我没有看到Mobile Safari打开并重定向。

我将继续调查,这非常有趣。


问题是如何为除 YouTube 以外的自定义应用程序模仿这种行为。 - Danra
@Danra,你说得完全正确!我被措辞弄糊涂了。 - Zebs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接