Ios6 按域启动带有URL的自定义应用程序

Ios6 按域启动带有URL的自定义应用程序,ios6,url-scheme,launching-application,custom-url,Ios6,Url Scheme,Launching Application,Custom Url,尽管YouTube应用程序现在不是苹果公司的内置应用程序,但点击YouTube链接(例如邮件中的链接)时,它看起来会立即打开YouTube应用程序 对于iOS 6中的自定义应用程序,有没有办法做到这一点?我只知道自定义方案是通过URL启动应用程序的一种方式。我不确定我是否理解你的问题,但下面是我尝试的答案。您询问是否有方法从另一个应用中打开第三方应用。答案是,如果应用程序实现了自定义URL方案,则您可以(请参阅并导航到“与其他应用程序通信”部分) 但你似乎也说你已经知道了。在这种情况下,我很确定

尽管YouTube应用程序现在不是苹果公司的内置应用程序,但点击YouTube链接(例如邮件中的链接)时,它看起来会立即打开YouTube应用程序


对于iOS 6中的自定义应用程序,有没有办法做到这一点?我只知道自定义方案是通过URL启动应用程序的一种方式。

我不确定我是否理解你的问题,但下面是我尝试的答案。您询问是否有方法从另一个应用中打开第三方应用。答案是,如果应用程序实现了自定义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[appID]

  • vnd.youtube

  • youtube

这意味着将请求重定向到列表上的一个URL。但当我尝试它时,我没有看到移动Safari打开然后重定向


我会继续调查,这很有趣。

为你的应用注册URL类型

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

调用URL(如上注册)

处理对自定义URL方案的调用

具有自己的自定义URL方案的应用程序必须能够处理传递给它的URL。所有URL都会在启动时、应用程序运行时或后台传递给应用程序代理。要处理传入URL,您的委托应实现以下方法:

使用
应用程序:willFinishLaunchingWithOptions:
应用程序:didffinishlaunchingwithoptions:
方法检索有关URL的信息并决定是否要打开它。如果任一方法返回否,则不会调用应用程序的URL处理代码。 在iOS 4.2及更高版本中,使用
application:openURL:sourceApplication:annotation:
方法打开文件。 在iOS 4.1及更早版本中,使用
应用程序:handleOpenURL:
方法打开文件。 如果URL请求到达时您的应用程序未运行,则会启动并移动到前台,以便打开URL。
应用程序:willFinishLaunchingWithOptions:
应用程序:didFinishLaunchingWithOptions:
方法的实现应从其选项字典中检索URL,并确定应用程序是否可以打开它。如果可以,请返回YES,并让您的
应用程序:openURL:sourceApplication:annotation:
(或
应用程序:handleOpenURL:
)方法处理URL的实际打开。(如果实现这两种方法,则在打开URL之前,这两种方法都必须返回YES。)

如果您的应用正在运行,但在URL请求到达时处于后台或挂起,则会将其移动到前台以打开URL。此后不久,系统调用代理的
应用程序:openURL:sourceApplication:annotation:
,检查URL并打开它。如果您的代理未实现此方法(或当前系统版本为iOS 4.1或更早版本),系统将调用您的代理的
应用程序:handleOpenURL:
方法

注意

NSURL *myURL = [NSURL URLWithString:@"todolist://www.acme.com?Quarterly%20Report#200806231300"];
[[UIApplication sharedApplication] openURL:myURL];
如果两个或多个应用程序注册了相同的自定义URL,则无法保证在调用自定义URL时iOS将打开哪个应用程序

进一步阅读


是我之前尝试在我的答案中发布的链接,但被删除。对不起,@ChrisF…仍在学习诀窍。我发布了一个我认为你可能需要的深度的答案。我在为自定义URL注册应用程序时遵循了完全相同的步骤。你能看到我下面的回答是否回答了你的问题吗?@SashaZd你的深入回答与答案无关,因为它没有解释YouTube应用程序是如何做的。问题是如何在YouTube以外的自定义应用程序中模仿这种行为。@Danra你完全正确!我被这句话弄糊涂了。谢谢,我在问题中提到我知道自定义URL方案,我正在寻找一种不用它们的方法,就像youtube一样。youtube使用自定义URL方案。什么让你认为它没有?www.youtube.com/watch?自定义URL方案是否分配给youtube是什么让你认为
www.youtube.com/watch?
是URL方案?它启动应用程序的事实?!这是你能做到的唯一方法。