上下文
我正在用Xcode开发一个Swift iOS应用程序(iOS 13和Xcode 11.3)。
目标
基本上,在我的应用程序中,我希望能够在iOS podcast应用程序中打开一个私有播客提要的URL (将其添加为新订阅)。
我在做什么
我的理解是,这样做的方法是使用定义在*选项:完成处理程序:)类上的UIApplication方法,并使用podcast://预置我的URL。下面是一个例子:
// My URL
let url = URL(string: "podcast://https://username:password@example.com/private-podcast-feed")!
// From inside a `UIViewController` method...
UIApplication.shared.open(url, options: [:]) { (success: Bool) in
// ... handle the result
}问题所在
上面的代码确实打开了iOS播客应用程序,并触发了一个输入预填充的Add a Show by URL...警告框,但是最初的URL现在以http://为前缀;即http://https://username:password@example.com/private-podcast-feed (参见下面附在屏幕截图中的例子)。
从“用户体验”的角度来看,这种行为是可怕的,因为大多数人不会注意到,操作也会失败。
解决这个问题的一个潜在方法是,在我的应用程序中省略https://协议,使用预填充的http://,并在服务器上设置一个301 Redirect (我并没有尝试它来查看Podcasts是否遵循重定向),但这对我的用例没有好处,因为我的URL包含凭证。
我的问题
有人知道怎么绕过这件事吗?

发布于 2020-01-20 13:30:48
结果发现,在我的应用程序中定义URL实例时,我没有使用正确的语法。而不是使用podcast://https...,我应该使用podcast:https...,没有两个正斜杠的。
下面是一个工作示例(即将打开Podcasts应用程序而不是将http添加到已经存在的https方案的示例):
// My URL
let url = URL(string: "podcast:https://username:password@example.com/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方案,我说文档中使用的语法(参见为应用程序定义自定义URL方案)。
https://stackoverflow.com/questions/59705522
复制相似问题