我无法找到有关如何从我当前的自定义应用中打开其他自定义应用的清晰,准确的指南。
我一直收到这个错误:
此应用不允许查询方案 myScheme 。
答案 0 :(得分:1)
我设法通过以下方式实现这一目标:
在下面的示例中,主应用程序是我想要单击按钮并打开另一个应用程序的主应用程序。此示例中的其他应用程序称为app2。
两个应用必须属于同一方案,以防止出现上述“不允许”错误。
在下面的示例中,该方案称为myapps,但它可以是您在“信息”选项卡中设置的任何内容(如下所述)。
在app2中:
点击您的应用目标(点击左侧层面的应用名称,然后点击目标下的应用名称)。
单击“信息”选项卡,然后向下滚动到“URL类型”。
点击箭头展开网址类型,点击+添加新条目。
在标识符字段中输入唯一标识符(我刚刚使用该应用程序的软件包ID ...例如com.mycompany.app2。
在“URL方案”字段中,输入URL方案的名称。在这个例子中,我们将其称为myapps,因此我们将myapps输入到字段中。此方案名称需要在主应用程序中设置。对于您要打开的每个其他应用程序,您需要设置不同的方案名称,然后还将方案名称添加到主应用程序中。
在主应用程序中:
重复步骤1到5 - 唯一的更改将是步骤4,因为唯一标识符将不同,如果您要设置多个应用程序,则步骤5。
设置按钮。
将按钮连接到以下操作:
@IBAction func pressOpenAnotherApp(_ sender: Any) {
openApp(appURL: "myapps://com.companyname.app2"
}
设置openApp函数:
func openApp(appURL: String) {
let openApp = URL(string: appURL)!
if UIApplication.shared.canOpenURL(appURL) {
UIApplication.shared.open(appURL, options: [:], completionHandler: { (success) in
print("Open App: \(appURL)")
print("Status: \(success)")
})
}
}
这对我有用,虽然这些信息只是通过我自己的试验和错误所以它可能不是100%准确但它有效!
答案 1 :(得分:0)
您是否在尝试实际打开网址之前使用canOpenURL
? (如果没有安装第二个应用程序,你应该这样做。)The documentation goes into plenty of detail,关于在Info.plist中包含LSApplicationQueriesSchemes的要求。
答案 2 :(得分:0)
您有2个应用程序可以测试此问题。
步骤:App_B 在App_B中选择设置方案网址(您要重定向打开的名称以检查是否已安装此App_B)
确定,我们将方案网址设置为完整。 然后转到您的App_A(您当前的应用)
步骤:App_A
1。创建您的项目
2。创建功能开放方案网址
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
openApp_B_installed()
}
func openApp_B_installed(){
//LSApplicationQueriesSchemes in your Info.plist.
let appName = "App_B"
let appScheme = "\(appName)://"
let appUrl = URL(string: appScheme)
if let url = appUrl,
UIApplication.shared.canOpenURL(url) {
print("App installed")
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: {
(success) in
if (success)
{
print("OPENED \(url): \(success)")
}
else
{
print("FAILED to open \(url)")
}
})
} else {
// Fallback on earlier versions
UIApplication.shared.openURL(url)
}
}else {
print("App not installed")
}
}
恭喜您完成了。
您尝试通过安装App_A,App_B进行测试,并仅通过可以在openApp_B_installed()
中调试的App_A进行安装
我希望它有助于澄清和解决此主题的问题。 谢谢