【问题标题】:Multiple apps with the same URL Scheme - iOS具有相同 URL 方案的多个应用程序 - iOS
【发布时间】:2012-10-19 06:54:22
【问题描述】:

所以对于我的新应用程序,我有一个 URL 方案,以便人们可以从另一个应用程序或网站启动我的应用程序......“myapp://”......如果有另一个应用程序会发生什么与我的 URL 方案相同的 AppStore?或者如果有人试图窃取我的 URL Scheme?

【问题讨论】:

    标签: ios xcode url-scheme


    【解决方案1】:

    如果两个应用注册了相同的自定义 URL 方案,则不确定哪个应用将实际启动。一个会推出,但没有办法知道。

    这是一个真正的踢球者。如果您的设备上有两个应用程序具有相同的 URL 方案,并且您删除了实际启动的应用程序,则如果不重新启动 iOS 设备,另一个应用程序将不会通过该 URL 启动。

    您最好的解决方案是确保您的自定义 URL 方案不是微不足道的,因此其他应用具有相同方案的可能性很小。

    【讨论】:

    • 但是您可以防止恶意开发者如何应对呢?例如,如果我将我的 URL 方案设置为“Facebook://”或他们使用的任何内容......也许每次有人点击我的应用程序启动并且用户看到一两个广告并且我得到钱:o(我不会'当然不会这样做,但那里有一些可怜的人可能会)ehhh
    • 我从未听说有人这样做,但你是对的,有人可以。我想 Apple 可能会检查以确保您定义的任何自定义 URL 方案都适合您的应用,但我从未听说过有人必须更改他们的方案。
    • Apple 应该让开发人员在线创建 URL 方案,并提前告诉那里是否已经采取了某些措施。
    • 我也有同样的疑问,偶然发现了这个帖子。 @AmoghTalpallikar - 如果 Apple 提供 URL 注册框架,人们会简单地注册许多 URL 方案并且它们没有被使用。也许应该有一种方法可以将 URL 方案以某种方式与应用程序的配置文件相关联,或者推送通知的工作方式与开发人员的/临时配置文件等相关联。不过,无论当前设置什么系统,正如这篇文章的提问者正确指出的那样,显然它不安全。
    • 请注意,关于删除处理 URL 的应用程序的错误已从(至少)iOS8 开始修复
    【解决方案2】:

    根据 Apple 文档:

    如果多个第三方应用程序注册处理相同的 URL 方案,则不确定选择哪个应用程序来处理该类型的 URL。

    来自 Apple 文档的准确引用,连续 8 年:

    注意:如果多个第三方应用注册处理相同的 URL 方案,则目前没有确定哪个应用将获得该方案的过程。

    来源:

    截至 2019 年 9 月,这部分文档已从 Apple 网站上删除。最接近的相关文档现在可能是Register Your URL Scheme

    【讨论】:

      【解决方案3】:

      2016 年更新

      Apple 的政策自 2012 年以来发生了变化。今天他们表示,不允许多个应用注册同一个方案。注册时间是比运行时更干净的解决争用的地方,因为它避免了其他答案讨论的安全问题。

      注意:如果多个第三方应用注册处理相同的 URL 方案,则目前没有确定哪个应用将获得该方案的过程。

      来源:https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1

      【讨论】:

      • 我很困惑。您似乎是在说多个应用程序不能具有相同的 URL 方案,但随后您添加了“注释”,表示它们可以并且它是未定义的,这就是 2012 年的回答所说的。
      • 让我澄清一下:在 2012 年,Apple 将允许多个应用程序使用相同的方案注册,并且将启动哪个应用程序的运行时行为是未定义的。现在,Apple 似乎在注册时而不是运行时做出决定,这意味着运行时的行为将得到很好的定义,给定方案只有一个可能的应用程序。
      • @Bosh 我看不出您的评论如何澄清您的答案。 “注册时间”是什么意思?到目前为止,我认为您的回答与 2012 年没有任何不同。
      • @Bosh 我想澄清一点寄存器。因此,据我所知,有两种可能的方法。 1.如果Apple看到您尝试提交的应用程序的URL已经被另一个应用程序获取,他们将拒绝该应用程序。 2. Apple 将完全允许使用相同的 URL 方案将应用程序上传到 AppStore,但是当您下载的应用程序的 URL 已被手机上的另一个应用程序支持时,它会简单地忽略您的应用程序作为该 URL 支持的应用程序吗?
      • @Vincent 我认为你是对的,现在看来文档说的是它最初在 2012 年所说的(不确定它是否曾经改变过),看起来两个应用程序在 URL 方案中仍然存在冲突问题。我用谷歌搜索了 Bosh 的答案中的斜体引用,除了这篇文章和这篇文章的存档站点之外,没有找到带有这些词的 URL。
      【解决方案4】:

      正如该线程中的其他答案所涵盖的那样,将多个应用程序注册为能够处理特定的自定义 URL 方案是完全可以接受的,并且如果设备上安装了 2 个以上的应用程序能够处理特定的自定义 URL 方案,未定义系统将在运行时选择哪个应用程序。

      如果对于您的特定用例很重要,您的应用程序(并且只有您的应用程序)在设备上注册为能够处理特定 URL,则首选 universal links 而不是 custom URL schemes。通用链接是标准的 HTTP 或 HTTPS 链接,粗略的想法是,在安装您的应用程序时,系统会检查存储在您的 Web 服务器上的文件,以验证您的网站是否允许您的应用程序代表它打开 URL。如果在打开此类 URL 时您的应用未安装在设备上,系统会在 Safari 中正常打开该 URL,让您的网站处理它。

      有关通用链接和自定义 URL 方案的更多信息,请参阅 Allowing Apps and Websites to Link to Your Content 文档页面。

      【讨论】:

      • 从当前的 Apple 文档中,当说 URL 方案也由应用标识符字符串支持时:“您随方案提供的标识符将您的应用与其他声明支持相同方案的应用区分开来。确保唯一性,请指定包含您公司的域名和应用程序名称的反向 DNS 字符串。虽然使用反向 DNS 字符串是最佳做法,但它不会阻止其他应用程序注册相同的方案并处理关联的链接。请改用通用链接自定义 URL 方案,以定义与您的网站唯一关联的链接。”
      • @SorinDolha,从您分享的引用和一般文档页面(即this 页面)中并不清楚系统如何使用标识符来区分多个声明支持同一方案的应用程序.如果您能提供解释,那就太好了。
      • 是的,很抱歉 - 评论中没有足够的字符来包含链接。这是:developer.apple.com/documentation/xcode/…。但不幸的是,我没有找到任何关于系统如何使用标识符来决定启动哪个应用程序或者它是否将它用于任何事情的任何信息。然而,在关于这个主题的其他几个线程中,一些人建议 - 说他们通过实验得出结论 - 将调用第一个使用相同方案的已安装应用程序。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 2012-03-13
      • 1970-01-01
      相关资源
      最近更新 更多