2017-03-07 88 views
1

我正在检查用户是否安装了几个应用程序。我需要它在ios9和ios 10上工作。 我在ios9上测试,schemeAvailable func返回true,即使应用程序通过 没有安装在设备上。检查在iOS 9和10上安装的应用程序

func schemeAvailable(scheme: String) -> Bool { 
    if let url = URL(string: scheme) { 
     return UIApplication.shared.canOpenURL(url) 
    } 
    return false 
} 

我加入以下到我的info.plist即应用我会检查安装:

<key>LSApplicationQueriesSchemes</key> 
<array> 
<string>app1</string> 
<string>app2</string> 
</array> 

,并在我的项目的信息标签,我加入了2种网址类型和插入的标识和每个网址的方案。

+0

的可能的复制[的OpenURL:弃用iOS的10](http://stackoverflow.com/questions/39548010/openurl-deprecated-in-ios-10) – dmorrow

+0

@dmorrow我正在解释ios9的问题 – user2363025

+0

'canOpenURL'不被弃用 – dan

回答

3

这听起来像你没有所有注册正确。您的App1和App2都需要URL标识符和方案,并且您的“想要启动App1和App2”的应用程序必须定义LSApplicationQueriesSchemes

E.G.

这是在 “应用1”

enter image description here

这是在 “应用2”

enter image description here

这是 “LauncherApp”

enter image description here

然后,在 “LauncherApp” 我可以这样做:

let s = "DMCApp1://TestMe" 
    let customURL: URL = URL(string: s)! 

    if UIApplication.shared.canOpenURL(customURL) { 
     print("YES - I can open App1 !!!") 
     UIApplication.shared.open(customURL, options: [:], completionHandler: nil) 
    } else { 
     print("NO - App1 is not available.") 
    } 
0

您不必在应用程序中添加其他应用程序的方案。如果你这样做,你的应用程序将成为该方案的URL响应者,并且始终如此。没有标记

canOpenURL方法上documentation

为废弃我复制一个片段与我使用通过定制方案打开程序URL代码的一部分...

/** 
    Abre los perfiles de la app en las distintas redes sociales. 

    - Parameters: 
     - url: Esquema personalizado de la app 
     - secondaryURL: Si la app no está presente en el dispositivo abrimos su version web (twitter, facebook, etc...) 
*/  
    func open(_ url: String, secondaryURL: String? = nil) -> Void 
     { 
      if let url = URL(string: url), UIApplication.shared.canOpenURL(url) 
      { 
       UIApplication.shared.open(url, completionHandler: nil) 
      } 
      else if let secondaryURL = secondaryURL, let url = URL(string: secondaryURL), UIApplication.shared.canOpenURL(url) 
      { 
       UIApplication.shared.open(url, completionHandler: nil) 
      } 
      else 
      { 
       print("No se puede hacer nada de nada.\r\napp_url: \(url)") 
      } 
     } 

下面是一个例子。我尝试打开twitter应用程序,如果未显示,请打开Safari并显示twitter网页。

@IBAction private func handleTwitterButtonTap(sender: UIButton) -> Void 
{ 
    let twitter_app_url: String = "twitter://user?screen_name=GetPomodoroApp" 
    let twitter_web_url: String = "https://twitter.com/GetPomodoroApp" 

    self.open(twitter_app_url, secondaryURL: twitter_web_url) 
} 
+0

如果我删除我的项目的信息选项卡中的2个url类型,标识符和url方案, 然后我得到 URL失败:“app1://” - 错误:“(null)”AND URL失败:“app2 ://“ - error:”(null)“ 即使安装了app2 – user2363025

+0

Hi @ user2363025。我已经添加了一个例子。 – Adolfo

+0

这个答案很混乱。这些方案必须在“LSApplicationQueriesSchemes”下列出。 – rmaddy

相关问题