Firebase 动态链接不适用于 iOS 中同一项目中的不同目标

Vis*_*a ツ 7 android deep-linking ios firebase firebase-dynamic-links

Android 和 iOS 的 Firebase 动态链接的行为是否不同?如何为 iOS 中的不同目标为同一项目实施 Firebase 动态链接?

在 Android 中,Firebase 动态链接适用于不同的风格,但在 iOS 中,Firebase 动态链接不适用于不同的目标。

对于 iOS,对于具有不同目标的同一项目,我必须使用 Firebase 为 Firebase 动态链接实现什么?

Android 和 iOS 的 Firebase 动态链接行为差异的实际原因是什么?要为不同的目标实施 Firebase 动态链接,我是否必须为同一应用程序创建单独的项目?

Joh*_*145 5

TLDR

Firebase 动态链接不支持对包含在同一 Firebase 项目中的多个 iOS 应用/目标使用相同的网址前缀。不过有多种解决方法:


解决方案 1:使用多个(子)域

如果每个 iOS 应用程序都使用自己的(子)域进行动态链接,则它会起作用。例如,不是仅pets.page.link用于所有目标,而是cats.page.link用于您的第一个应用目标和dogs.page.link第二个应用目标。对此的关键要求是您的每个目标Associated Domains Entitlement只包含它应该侦听的(子)域。

就我个人而言,我正在使用这个解决方案,它工作得很好。

解决方案 2:使用自定义域

如果您坚持对所有目标使用相同的域,您应该能够通过使用自定义域以及一些额外的工作来解决这个问题。

按照官方文档设置自定义域,my-own-fancy-pet-app.com而不是使用 Firebase 本机提供的任何 URL 前缀(如pets.page.link)。

创建firebase.json文件时,不要使用建议的"appAssociation": "AUTO",选项,而是将其设置为NONE. 这将阻止 Firebase 自动创建有问题的apple-app-site-association文件(以及assetlinks.json)。改用 Firebase 托管来提供手动创建的版本。然后您可以使用apple-app-site-association来根据您的需要对其进行配置,即仅将特定路径重定向到每个目标,而不是将所有路径匹配到所有目标。

免责声明:我还没有测试过这种方法,因为在我的情况下它不值得额外的工作。

解决方案 3:使用多个 Firebase 项目

当然,您可以简单地为每个目标创建一个新的 Firebase 项目。您不能在多个项目中使用相同的(子)域,因此您被迫隐式实施解决方案 1。


背景

为什么它适用于 Android 而不适用于 iOS?

在 Android 上,所需assetlinks.json文件映射完整域,包括指向 Android 应用程序(或风格)列表的所有路径。特定应用程序是否支持特定链接由通过在 Android 清单文件中本地路由所需路径来确定。

在 iOS 上,情况正好相反:所需apple-app-site-association文件确定哪些路径与哪些应用程序匹配。不幸的是,当使用 Firebase 动态链接时,您不负责此文件,Firebase 只是将 URL 的所有路径与 Firebase 项目中包含的所有应用程序进行匹配。在本地,您只能配置Associated Domains EntitlementiOS 应用程序的 。然而,后者只处理包括所有路径的完整域。

Firebase 动态链接限制

不幸的是,官方文档中没有提到这个限制。然而,它已经被证实,例如这里这里。如第一个链接中所述,他们曾经计划添加此功能,但看起来他们仍然没有。我会联系支持人员要求更新并要求他们至少向文档添加适当的提示。


PS:我知道这是一个很老的问题,在问的时候情况可能有点不同。尽管如此,今天仍然是一个问题。


小智 0

对于深层链接,您将使用应用程序的包标识符。您的其他目标将具有不同的标识符。使用 Info.plist 中的 UIApplicationShortcutItems 并在相应的 plist 文件中添加深层链接衬衫剪切条目。