在一个应用程序内部启动另一个应用程序是否可能?
例如,在我的应用程序中,我希望用户按下按钮并启动另一个应用程序(不要关闭当前应用程序,只需打开另一个应用程序并切换到它)。
如何在iOS 8中使用Swift实现此功能?
iOS SDK不允许您的应用与其他应用程序交互,除非它使用iOS 8引入的新的扩展框架。但是,此扩展仅允许您在另一个应用程序中提供自己应用程序的内容和功能:您无法强制打开另一个应用程序。
您所描述的只有通过开发应用程序的深度链接才能实现,这种链接相对较少。
例如,您的应用程序中的链接可以使用pocket://
链接(而不是http://
或https://
)打开Pocket应用程序,该应用程序允许您保存文章以供以后阅读,同样,Pebble Smartwatch应用程序可以使用pebble://
链接打开。但是,这些链接是由那些应用程序的开发人员定义的,此技术并不适用于所有应用程序。
我认为你正在寻找苹果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和调用函数的问题。 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.")
}
})
}
openURL
打开一个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)
}
}