我正在使用Xcode(iOS 13和Xcode 11.3)开发Swift iOS应用。
基本上,从我的应用程序中,我希望能够在iOS Podcasts应用程序中打开私有播客feed的URL(将其添加为新订阅)。
[我的理解是,这样做的方法是使用在open(_:options:completionHandler:)类上定义的UIApplication
方法,并用podcast://
前缀我的URL。这是一个例子:
// My URL
let url = URL(string: "podcast://https://username:[email protected]/private-podcast-feed")!
// From inside a `UIViewController` method...
UIApplication.shared.open(url, options: [:]) { (success: Bool) in
// ... handle the result
}
上面的代码的确打开了iOS Podcasts应用,并触发了一个Add a Show by URL...
警报框,其输入已预先填充,但是原始URL现在以http://
为前缀;即http://https://username:[email protected]/private-podcast-feed
(有关示例,请参见底部的屏幕截图)。
从“用户体验”的角度来看,此行为很糟糕,因为大多数人不会注意到,操作将失败。
解决该问题的可能方法是,在我的应用程序中省略https://
协议,并使用预先填充的http://
并在我的服务器上安装一个301 Redirect
(我没有尝试过查看Podcasts是否在后面重定向),但这对我的用例不利,因为我的URL包含凭据。
有人知道解决这个问题的方法吗?
事实证明,在我的应用程序中定义URL
实例时,我没有使用正确的语法。我应该使用podcast://https...
,而不是使用podcast:https...
,没有两个正斜杠。
所以这是工作示例(即将打开Podcasts应用并且不将http
放在已经存在的https
方案前面的示例):
// My URL
let url = URL(string: "podcast:https://username:[email protected]/private-podcast-feed")!
// From inside a `UIViewController` method...
UIApplication.shared.open(url, options: [:]) { (success: Bool) in
// ... handle the result
}
最初让我感到困惑的是,当在iOS中使用URL方案创建由应用程序打开的超链接时,需要使用“双斜杠”语法。例如,如果我在电子邮件中共享一个链接,则需要指定podcast://{my-url}
。但是,如果我想从内部和其他应用程序中使用其URL方案之一打开应用程序,则需要排除这两个斜杠,否则该命令可能会使目标应用程序感到困惑(请注意:我对此没有任何文档,但这是我在此特定情况下观察到的结果。
我确实在解决相反的问题时才偶然发现答案:我试图为自己的一个iOS应用程序定义自己的URL方案,我说了文档中使用的语法(请参阅Defining a Custom URL Scheme for Your App。