TLDR
Firebase 动态链接不支持对同一 Firebase 项目中包含的多个 iOS 应用/目标使用相同的网址前缀。不过有多种解决方法:
解决方案 1:使用多个(子)域
如果每个 iOS 应用程序都使用自己的(子)域进行动态链接,它就可以工作。例如,不要将pets.page.link 用于所有目标,而是将cats.page.link 用于您的第一个应用程序目标,将dogs.page.link 用于您的第二个应用程序目标。对此的关键要求是您的每个目标的Associated Domains Entitlement 只包含它应该监听的(子)域。
就我个人而言,我正在使用这个解决方案,而且效果很好。
解决方案 2:使用自定义域
如果您坚持对所有目标使用相同的域,您应该能够通过使用自定义域以及一些额外的工作来解决这个问题。
按照 the official documentation 设置自定义域,例如 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 项目中包含的所有应用程序。在本地,您只能配置您的 iOS 应用的Associated Domains Entitlement。但是,后者只处理包括所有路径的完整域。
Firebase 动态链接限制
很遗憾,官方文档中的任何地方都没有提到此限制。但是,它已被证实,例如here 或 here。如第一个链接中所述,他们曾经计划添加此功能,但看起来他们仍然没有。我会联系支持人员要求更新,并要求他们至少在文档中添加适当的提示。
PS:我知道这是一个很老的问题,在提问的时候情况可能有点不同。不过今天仍然是个问题。