【发布时间】:2016-12-06 10:56:30
【问题描述】:
我无法找到关于如何从我当前的自定义应用程序中打开另一个自定义应用程序的清晰、准确的指南。
我不断收到此错误:
此应用不允许查询方案myScheme。
【问题讨论】:
-
这与 Scheme 编程语言有什么关系?
-
它与 Swift 3 中的 URL Scheme 有关。我稍微修改了标签。
我无法找到关于如何从我当前的自定义应用程序中打开另一个自定义应用程序的清晰、准确的指南。
我不断收到此错误:
此应用不允许查询方案myScheme。
【问题讨论】:
我通过执行以下操作成功地完成了这项工作:
在下面的示例中,主应用程序是我想要单击按钮并打开另一个应用程序的主应用程序。此示例中的另一个应用称为 app2。
两个应用程序必须属于同一方案,以防止出现上述“不允许”错误。
在下面的示例中,该方案称为 myapps,但它可以是您在“信息”选项卡中设置的任何内容(如下所述)。
在 app2 中:
单击您的应用目标(单击左侧层次结构中的应用名称,然后单击目标下的应用名称)。
单击信息选项卡并向下滚动到 URL 类型。
单击箭头展开 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% 准确,但它有效!
【讨论】:
在尝试实际打开 URL 之前,您是否使用了canOpenURL? (如果没有安装第二个应用程序,您应该这样做。)The documentation goes into plenty of detail,关于在 Info.plist 中包含 LSApplicationQueriesSchemes 的要求。
【讨论】:
您有 2 个应用程序来测试此问题。
步骤:App_B 在 App_B 中选择 set scheme Url(您要重定向的名称以检查此 App_B 是否已安装)
好的,我们设置方案 URL 完成。 然后转到您的 App_A(您当前的应用程序)
步骤:App_A
1.创建你的项目
2.create func open scheme url
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 并安装 App_A 进行测试,只有您可以在 openApp_B_installed() 中调试
我希望它有助于澄清和解决此主题的问题。 谢谢
【讨论】: