在iOS 8中,使用Swift是否可以启动另一个应用程序?

9

在一个应用程序内部启动另一个应用程序是否可能?

例如,在我的应用程序中,我希望用户按下按钮并启动另一个应用程序(不要关闭当前应用程序,只需打开另一个应用程序并切换到它)。

如何在iOS 8中使用Swift实现此功能?


1
可能是Can an iPad app directly launch another app?的重复问题。 - jtbandes
5个回答

9
唯一的方法是使用开发人员创建的深度链接

iOS SDK不允许您的应用与其他应用程序交互,除非它使用iOS 8引入的新的扩展框架。但是,此扩展仅允许您在另一个应用程序中提供自己应用程序的内容和功能:您无法强制打开另一个应用程序。

您所描述的只有通过开发应用程序的深度链接才能实现,这种链接相对较少。

例如,您的应用程序中的链接可以使用pocket://链接(而不是http://https://)打开Pocket应用程序,该应用程序允许您保存文章以供以后阅读,同样,Pebble Smartwatch应用程序可以使用pebble://链接打开。但是,这些链接是由那些应用程序的开发人员定义的,此技术并不适用于所有应用程序。


5

我认为你正在寻找苹果URL Schemes。如果第三方应用程序定义了任何URL Schemes,则可以使用以下代码打开它:

if let url  = URL(string: "https://dev59.com/g4Hba4cB1Zd3GeqPR32I") // Change the URL with your URL Scheme
{
    if UIApplication.shared.canOpenURL(url)
    {
        UIApplication.shared.openURL(url)
    }
}

你可以通过使用URL而不是NSURL来简化代码,可以在init中强制解包一次(或者更好的方式是,在条件语句中添加if let url = url),并且去掉== true - Connor Neville
如果你不知道另一个应用程序的URL方案是什么怎么办? - Eenvincible
@Eenvincible:如果你不知道,那么你就不能使用。通常应用程序开发者会发布这样的信息。有很多网页列出了可用的URL schemes。 - Midhun MP

2

其他人已经在这里描述了正确的想法,但存在一些处理URL和调用函数的问题。 UIApplication.shared.open(_ url:)已被弃用,并被带有完成处理程序的新版本所取代。

正如其他人所提到的,您需要接收方应用程序定义一个URL方案。只要他们定义了,您可以像这样做:

func launchTwitterApp() {
    guard let url = URL(string: "twitter://user?id=12345") else {
        preconditionFailure("There was something wrong with our url, this shouldn't happen")
    }
    UIApplication.shared.open(url, completion: { success in 
        if success {
            print("We opened the Twitter app.")
        }
        else {
            print("Something went wrong. We might not have the necessary app or the right url.")
        }
    })
}

1
无论您使用什么语言(Obj-C/Swift),您都可以使用openURL打开一个URL方案来启动应用程序(如果提供了URL)。

0
我们可以通过创建应用程序的自定义URL,然后在按钮点击事件中打开自定义URL来实现这一点。
let kCustomURLScheme = "DemoDriver://Daffomac.DemoDriver"

func openCustomApp() {

    let Url = NSURL(string: kCustomURLScheme)
    if UIApplication.shared.canOpenURL(Url! as URL)
    {
        UIApplication.shared.openURL(Url! as URL)

    } else {
        //redirect to safari because the user doesn't have Instagram
        UIApplication.shared.openURL(NSURL(string: kCustomURLScheme)! as URL)
    }

}

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