如何获取 AppLinks/通用链接的任何应用程序的 URI 方案?

Posted

技术标签:

【中文标题】如何获取 AppLinks/通用链接的任何应用程序的 URI 方案?【英文标题】:How to get the URI scheme of any app for AppLinks/universal linking? 【发布时间】:2019-10-15 06:17:47 【问题描述】:

我需要从我的 react 原生移动应用打开第三方应用。我知道这在 ios 上称为通用链接,在 android 上称为 AppLink。

我为此做了很多研究,我已经能够在应用商店中设置第三方应用的链接。现在,如果用户安装了应用程序,我只需要让我的应用程序打开该应用程序。不过,这需要其他应用程序的 URI 方案。

我的问题是,如何获取此第三方应用程序的 URI 方案?相反,我如何获取任何应用程序的 URI 方案?我知道 twitter 应用程序的 URI 方案是“twitter://app”,但我试图链接到的应用程序比 twitter 或其他流行应用程序更小众,所以在线上这类事情没有帮助。

有什么建议吗?

【问题讨论】:

【参考方案1】:

查找 iOS 应用的 URL 方案

由于 Apple 倾向于保密,因此很难找到 iOS 应用程序的 URL 方案。但这是可以完成的。下面是我的做法,使用名为 iMazing 的 Mac 应用程序。

    启动 iMazing,选择已连接的 iOS 设备,点击应用程序

    在窗口的页脚中,点击管理应用程序

    选择您感兴趣的应用程序,然后选择导出 .IPA 菜单项。注意:您可能需要先下载该应用。

    保存的文件将具有 .ipa 扩展名。将扩展名更改为 .zip,然后解压缩文件。您现在有了一个名称与应用名称匹配的目录。

    假设“asana”是应用名称,在文本编辑器中打开文件“asana/Payload/asana.app/Info.plist”,并搜索包含“CFBundleURLSchemes”的部分。假设应用程序包含 CFBundleURLSchemes(它们是可选的),它应该看起来像这样:

    URL 方案在<string>asana</string> 中,因此本例中完整的 url 方案是“asana://”。通过在 iOS Safari 浏览器窗口中键入 URL 来测试该 URL 是否会启动应用程序。如果有效,Safari 应该会显示如下警告:


没有 CFBundleURLSchemes 的应用怎么办?

我还没有找到直接在没有 CFBundleURLSchemes 的情况下启动应用程序的方法,但是您可以链接到应用程序商店中的应用程序页面,用户可以在其中使用 Open 打开应用程序 按钮(如果未安装应用,则为 Get 按钮)。

您需要从 App Store 获取应用页面的 URL:

    打开App Store,进入应用页面,点击分享图标:

    点击复制链接

网址将如下所示:

https://apps.apple.com/us/app/asana-organize-tasks-work/id489969512

在 Safari 中单击该链接将在 App Store 中打开应用页面。

【讨论】:

这是一个巨大的帮助!我打算将它用于 iOS 版本。 iOS 和 Android 的 URI 方案是否相同? 我对 Android 的 URL 方案没有经验,抱歉。但看起来 Android 应用程序将其方案存储在清单文件中:developer.android.com/training/app-links/deep-linking 我刚得到 info.plist 文件,但文件中的任何地方都不包含 CFBundleURLSchemes。 并非所有应用程序都包含“CFBundleURLSchemes”定义,因为它们不是必需的。大多数更受欢迎的都有它们。你在看什么应用? @terrymorde 这是 Enphase Enlighten 应用程序。 play.google.com/store/apps/…【参考方案2】:

也许值得从一些背景开始: 有多种方法可以深度链接到应用程序,具体取决于平台(iOS\Android\WindowsPhone...)及其版本。

在 iOS 上,直到版本 9,打开应用程序的方式是使用 URI 方案,例如您在上面添加的那个:twitter://app。每个应用程序都声明应该使用的方案。因此,为了深入链接到您希望打开的应用程序,您需要使用它声明的方案。在版本 6 之前,这对于 Android 来说是相同的。

从 iOS9+ 开始,Apple 引入了 Universal Links 作为深度链接的方法。以下是一些信息:https://developer.apple.com/ios/universal-links/

在这些版本中,如果未安装应用,则在使用 Safari 浏览器(iOS 默认浏览器)时,URI 方案将不再起作用。但是,如果安装了应用程序,则 URI 方案应该允许打开应用程序,前提是一切都配置成功。在 Android 中有一个类似的方法叫做“AppLinks”。

话虽如此,以上信息用于为您的应用设置深层链接。我不认为从您的应用打开第三方应用是常见的用例 - 深层链接由应用所有者配置和使用(例如,用于发布他\她的应用以吸引用户)。

【讨论】:

感谢他们的提示!我改变了我的问题以反映你的建议。所以我实际上是在寻找 URI 方案,是吗? 嗯,这不是一个好的方法,因为第三方应用程序所有者可以随时更改 URI 方案,或者甚至停止支持 URI 方案,这反过来会破坏您绑定的任何深层链接从您的应用程序执行(或将要求您发布应用程序的新版本)。我认为最安全的方法是将用户重定向到第三方应用程序网页,而不是从您的应用程序中启动他们的应用程序。正如我之前提到的,深层链接是应用所有者吸引用户进入其应用的一种方法。

以上是关于如何获取 AppLinks/通用链接的任何应用程序的 URI 方案?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Rails 环境变量放在 apple-app-site-association 文件中以获取通用链接?

iOS 通用链接无法按预期工作 - 无论路径如何,都始终打开

实现通用链接时无法识别 JSON 文件

通用链接是不是适用于企业程序中的应用程序?

在支持通用链接的两个不同应用程序上支持相同的域..?

如果不满足某个条件,你怎么能忽略一个通用链接?