TLDR
Firebase 动态链接不支持对同一 Firebase 项目中包含的多个 iOS 应用/目标使用相同的 URL 前缀。虽然有多种解决方法:
解决方案 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 Entitlement
您的 iOS 应用程序。但是,后者只处理包括所有路径的完整域。
Firebase 动态链接限制
不幸的是,官方文档中的任何地方都没有提到这个限制。但是,它已被确认,例如此处或此处。如第一个链接中所述,他们曾经计划添加此功能,但看起来他们仍然没有。我将联系支持人员要求更新,并要求他们至少在文档中添加适当的提示。
PS:我知道这是一个很老的问题,在提问的时候情况可能有点不同。不过今天仍然是个问题。