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

时间:2014-07-14 02:38:14

标签: ios swift ios8

是否可以从其他应用中启动任何应用?

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

如何使用Swift在iOS 8中完成?

5 个答案:

答案 0 :(得分:10)

执行此操作的唯一方法是使用应用程序开发人员必须创建的deep link

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

您所描述的内容只能通过相当不常见的深层链接实现,并且必须由您尝试打开的应用的开发人员定义。

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

答案 1 :(得分:6)

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

if let url  = URL(string: "http://stackoverflow.com/questions/24728854/is-it-possible-to-launch-another-app-in-ios-8-using-swift/") // Change the URL with your URL Scheme
{
    if UIApplication.shared.canOpenURL(url)
    {
        UIApplication.shared.openURL(url)
    }
}

答案 2 :(得分:2)

其他人已经在这里描述了正确的想法,但在处理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.") } }) } ,并将其替换为带有完成处理程序的新版本。

正如其他人所提到的,您需要收件人应用程序定义URL方案。如果他们有,你可以做这样的事情:

<input type="text" name="funkce<%=i %>" value="" size="20" data-toogle="tooltip" title="Vlož hodnoty a-z o maximální délce 3 znaky." style="width: 50px; padding: 2px" required maxlength="3"  pattern="([a-z]{1,3})|(([a-z]{1}[\s,]+)*[a-z]{1})" />

答案 3 :(得分:1)

无论您使用何种语言(Obj-C / Swift),您都可以使用openURL打开网址方案来启动应用(如果提供了网址)。

答案 4 :(得分:0)

我们可以通过创建该应用的自定义网址来实现此目的,之后我们可以在按钮的点击事件上打开自定义网址。

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)
    }

}