【发布时间】:2014-09-03 21:59:23
【问题描述】:
是否可以从另一个应用程序中启动任何应用程序?
例如,在我的应用程序中,我希望用户按下按钮并启动另一个应用程序(不要关闭当前应用程序,只需打开另一个应用程序并切换到它)。
如何在 iOS 8 中使用 Swift 实现?
【问题讨论】:
是否可以从另一个应用程序中启动任何应用程序?
例如,在我的应用程序中,我希望用户按下按钮并启动另一个应用程序(不要关闭当前应用程序,只需打开另一个应用程序并切换到它)。
如何在 iOS 8 中使用 Swift 实现?
【问题讨论】:
做到这一点的唯一方法是使用deep link,应用程序的开发者必须已经创建了该deep link。
iOS SDK 不允许您的应用与其他应用交互,除非它使用 iOS 8 引入的新 Extensions framework。但是,此扩展只允许您在另一个应用中提供您自己的应用的内容和功能:您不能强制打开另一个应用程序。
您所描述的内容仅适用于相当不常见的深层链接,并且必须由您尝试打开的应用程序的开发人员定义。
因此,例如,您的应用程序中的链接可以打开 Pocket 应用程序,它允许您保存文章以供以后阅读,使用 pocket:// 链接(而不是 http:// 或 https://),类似地,可以使用pebble:// 链接打开 Pebble Smartwatch 应用程序。但是,这些链接是由这些应用程序的开发人员定义的,这种技术并不适用于所有应用程序。
【讨论】:
我认为您正在寻找 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)
}
}
【讨论】:
URL而不是NSURL来清理它,在init中强制解包一次(或者,更好的是,在条件中添加if let url = url),并且删除== true。
无论您使用哪种语言(Obj-C/Swift),您始终可以使用openURL 打开 URL 方案以启动应用程序(如果提供了 URL)。
【讨论】:
我们可以通过创建该应用的自定义 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)
}
}
【讨论】:
其他人已经在这里描述了正确的想法,但在处理 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.")
}
})
}
【讨论】: