【问题标题】:Is it possible to launch another app in iOS 8 using Swift?是否可以使用 Swift 在 iOS 8 中启动另一个应用程序?
【发布时间】:2014-09-03 21:59:23
【问题描述】:

是否可以从另一个应用程序中启动任何应用程序?

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

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

【问题讨论】:

标签: ios swift ios8


【解决方案1】:

做到这一点的唯一方法是使用deep link,应用程序的开发者必须已经创建了该deep link

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

您所描述的内容仅适用于相当不常见的深层链接,并且必须由您尝试打开的应用程序的开发人员定义。

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

【讨论】:

    【解决方案2】:

    我认为您正在寻找 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
    • 如果您不知道其他应用的 URL 方案怎么办?
    • @Eenvincible:如果你不知道,那么你就不能使用。通常应用程序开发人员会发布此类信息。有很多网页列出了可用的 url 方案。
    【解决方案3】:

    无论您使用哪种语言(Obj-C/Swift),您始终可以使用openURL 打开 URL 方案以启动应用程序(如果提供了 URL)。

    【讨论】:

      【解决方案4】:

      我们可以通过创建该应用的自定义 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)
          }
      
      }
      

      【讨论】:

        【解决方案5】:

        其他人已经在这里描述了正确的想法,但在处理 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.")
                }
            })
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-06
          • 2011-03-27
          相关资源
          最近更新 更多